Ansible local を使ってオリジナルの Vagrantfile を作った

なぜ作ったのか

ホスト OS にいろいろ環境をつっこんでぐちゃぐちゃになるのが嫌だったので、vagrant で作った仮想マシンに全部つっこむようにしていました。ただ、ほぼほぼ vagrantfile いじってなかったので vagrant destroy したりするといろいろインストールやらやり直さないといけません。vagrant の良いところの 1 つとして環境破壊 -> 再構築が簡単であることがあげられると思いますが、再構築の部分をもっと簡単にするためにオリジナルの vagrantfile を作りました。

Vagrantfile

https://github.com/rnitame/Vagrantfile

初めて vagrant up したときか、vagrant provision をしたとき、ゲスト OS にインストールされた ansible が動いて諸々ソフトウェアをインストールします。

f:id:rnitame:20170627164655g:plain

各ソフトウェアのインストールされるバージョンはこの通り。 https://github.com/rnitame/Vagrantfile#software-version

中身について

f:id:rnitame:20170627164826p:plain

hosts の ip に対して playbook.yml にある内容を実行します。内容は roles にある tasks たちになります。 基本やっていることは、apt-get で最新版のものをインストールしてるだけです。他は nginx をスタートさせたりちょっとしたシェルを実行させたり。シェルを実行させるあたりについては、冪等性に気を付けつつ作りました。

はまった

vagrant up したときに ssh のコネクションをするところでタイムアウトしました。いろいろぐぐるタイムアウトになるまでの時間を増やせとかでてきますが解決せず。

解決策

公式の issue にあがってますが、NAT のインターフェースが接続されていなかったのが原因でした。(VirtualBox の Network のところを見て確認) https://github.com/mitchellh/vagrant/issues/7648

なので issue にもあるとおり、以下を vagrantfile へ。

config.vm.provider 'virtualbox' do |vb|
    vb.customize ['modifyvm', :id, '--cableconnected1', 'on']
end

https://github.com/rnitame/Vagrantfile/blob/master/Vagrantfile#L21

まとめ

ansible local を使ってオリジナルの vagrantfile を作りました。ホスト OS に ansible を入れる必要がないので、vagrant up するだけで良いのはとても助かりますね! それと、task 名を記述できるのでどこでなにをしているのかがわかりやすくて良いです。 Docker と組み合わせもしてみたい!