vagrant

皆さんVagrantfileをどこに配置されていますか。各Gitプロジェクト配下にVagrantfileを入れ、 Chefなどと連携して個別に動くようにしている方が多いと思います。

LOOKUP PATH

When you run any vagrant command, Vagrant climbs up the directory tree looking for the first Vagrantfile it can find, starting first in the current directory. So if you run vagrant in /home/mitchellh/projects/foo, it will search the following paths in order for a Vagrantfile, until it finds one:

> /home/mitchellh/projects/foo/Vagrantfile
> /home/mitchellh/projects/Vagrantfile
> /home/mitchellh/Vagrantfile
> /home/Vagrantfile
> /Vagrantfile
> This feature lets you run vagrant from any directory in your project.
> ```
>
> You can change the starting directory where Vagrant looks for a Vagrantfile by setting the VAGRANT_CWD environmental variable to some other path.
>
> http://docs.vagrantup.com/v2/vagrantfile/


元々知らなかったのですが、Vagrantfileは上の階層まで順々にLOOKUPして動いてくれます。
すなわちどこの階層にいても``vagrant ssh``などのコマンドが実行出来ます。


{PROJET}/Vagrantfile


このように必ずgitファイルの一番上に配置しておけばどこからでもアクセス出来ます。
私個人の経験として、過去に運用系の設定などは一個のフォルダにまとめて展開していましたが、
Vagrantfileは必ずPROJECT_ROOT配下に移動するべきと気付き、移動するようにしました。


{PROJET}/opsfiles/vagrant/Vagrantfile {PROJET}/opsfiles/capistrano/


変更後が以下の構成です。


{PROJET}/Vagrantfile {PROJET}/opsfiles/chef {PROJET}/opsfiles/capistrano/



### Disposalな環境準備のための ~/Vagrantfile


運用系のツールなどをテストするときに、とりあえず小さなマシンが欲しいということが多いかと思います。
``vagrant.app 192.168.33.33``のようなHostsが常時設定されていて、
ansibleやchefなどをそのサーバめがけて手軽にゼロからテスト出来るようなマシンです。

それを補足するのがまさにVagrantですが、Vagrantfile自体も案外準備するのは面倒です。
既存のプロジェクトからとってきたり、``vagrant init``の実行するかと思います。

ただ上にPATHをLookupしてくれるということを理解していれば、
実は$HOME配下に自分の良く使う設定のVagrantfileを置いておけば良いわけです。

~/Vagrantfile


そうすることにより、ターミナル上の好きな所から``vagrant up``と実行すればいつでも
クリーンな仮想マシンを取得することが出来ます。


### 仮想マシンへのアクセスalias

bashrcやzshrcに以下を追加すれば、vmとただくだけで仮想マシンへのアクセスを提供してくれます。

bashrc/zshrc

alias vm=“vagrant ssh || vagrant up”


少しハック気味でCtrl-Cを打つとvagrant upが発動したりなどしてしまうので、
もう少しいい感じの設定があれば、そちらのほうが良いと思います。


### dotfiles連携

厳密には連携ではない所ですが、dotfilesのディレクトリにVagrantfileを私はおいています。

https://github.com/rksz/dotfiles/

$ ls ~/dotfiles total 104 drwxr-xr-x 24 rksz staff 816 7 14 21:39 . drwxr-xr-x+ 113 rksz staff 3842 7 14 22:03 .. -rw-r–r– 1 rksz staff 1398 4 13 14:33 .ctags -rw-r–r– 1 rksz staff 5600 9 26 2014 .dir_colors -rw-r–r– 1 rksz staff 53 9 26 2014 .gemrc drwxr-xr-x 17 rksz staff 578 7 14 22:02 .git -rw-r–r– 1 rksz staff 3136 4 2 12:54 .gitconfig -rw-r–r– 1 rksz staff 151 9 26 2014 .gitignore -rw-r–r– 1 rksz staff 121 9 26 2014 .gitmodules -rw-r–r– 1 rksz staff 341 7 12 19:51 .gvimrc drwxr-xr-x 3 rksz staff 102 5 23 19:21 .peco -rw-r–r– 1 rksz staff 1456 9 26 2014 .taskrc -rw-r–r– 1 rksz staff 3933 5 22 14:15 .tmux.conf drwxr-xr-x 9 rksz staff 306 5 28 12:05 .vim -rw-r–r– 1 rksz staff 23002 7 13 16:21 .vimrc -rw-r–r– 1 rksz staff 699 7 12 22:20 .zprofile drwxr-xr-x 5 rksz staff 170 9 26 2014 .zsh -rw-r–r– 1 rksz staff 9323 7 14 08:53 .zshrc -rw-r–r– 1 rksz staff 147 5 17 09:35 README.md -rw-r–r– 1 rksz staff 717 7 14 08:52 Vagrantfile drwxr-xr-x 30 rksz staff 1020 7 13 09:46 bin -rwxr-xr-x 1 rksz staff 6071 7 14 21:39 bootstrap.sh


dotfiles運用されている方であれば、
dotfilesを$HOME(~)配下に置いてそこからシンボリックリンクで各種$HOME配下にコピーしているはずです。

ln -s /Users/rksz/dotfiles/.vimrc /Users/rksz/.vimrc ```

この運用に乗せてVagrantfileも格納してしまえば、 いつでもどこでも動かせるデフォルトのVagrantfileを構築が可能です。 これで好きなディレクトリから開発の相棒のバーチャルマシンを作ることが出来ます。

Vagrantは設計が本当によく出来ています。