先週は、Vagrant のプロビジョナーに ansible_local を使ってみたわけですが、その追補などをつらつらと書き出します。
- 目次 -
hosts の謎
ansible_local のプレイブックを書いていて、はたと気付いたことがあります。「hosts ファイルが無いけど、実行対象(自分自身)をどう書くのだろう」ということ。
最初、対象ホストを指定しないでやってみたところ、やはりエラーとなりました。
じゃぁ、とプレイブックと同階層に hosts ファイル書いてみたものの、どうも hosts ファイルはゲスト OS に送られていない様子。
そこで、ダメ元でプレイブックに「hosts: all」を書いてみたところ、あっさり実行出来ました。
ちゃんと「ゲスト OS 自身」を指すやり方があるとは思うものの、取り敢えず動いたと言うことで、そこで止まっています。謎だ。。。
2017/08/20 追記
昨日、ある勉強会で質問したところ「/vagant/.vagrant/ ディレクトリ(すなわち、ゲスト側で自動マウントされる、ホスト側の vagrant ファイルのあるパス)にインベントリファイルがあるのではないか」との回答を得ました。
が、それらしきものは見当たらず。
思いついて vagrant_local の英語ドキュメントを読んでみたところ、ちゃんと書いてました。
ansible.playbook = "provision/vagrant.yml" ansible.inventory_path = "provision/hosts"
のように書くと、hosts ファイルをちゃんと読み込むとのこと。しかし、良く考えれば、手動でわざわざ hosts ファイル用意しなくても良い気がしてきました。まぁ、こういう指定も出来ますよ、ということで。
ホスト OS の実行機によって動いたり動かなかったり……
最初、メインのデスクトップ機ではなく、ノート PC 上で実験していたのですが、一通り検証が終わって、デスクトップに Vagrantfile とプレイブックをコピーして、ブログを書きかけた時のことでした。
ノート PC では全く問題無く動いていたのに、デスクトップで vagrant up したところ、なんとプロビジョニングが実行されません。
「vagrantfle を持ち歩けば、どこでも同じ環境が手軽に作れるんじゃなかったのか!」と焦って、色々調べてみました。
最初、Vagrant のプラグインを疑ってみたのですが、ノート PC 側に vagrant-sakura プラグインが入っているだけ。このプラグインでこういう症状はさすがに起きないだろうと思って、調査続行。
で、vagrant up した時の出力をよく見ると、/vagrant ディレクトリにホスト側の vagrantfile ディレクトリがマウントされていない事を発見。なぜマウントされないのか、悩みつつ、vagrant up の出力をノート PC でやったときと詳しく比較してみると……。VartualBox ゲストアディッションのバージョンが、デスクトップ機の方が古い!
さらに謎が深まり、悩んだ末、下記にある Box ファイルが入ったディレクトリを削除して、Box ファイルを取得し直してやってみるとあっさり動きました。
C:\Users\ユーザー名\.vagrant.d\boxes
色々思い返してみると、昨年、Vagrant を触り始めたときに、同じ提供元の Box ファイルを試していました。
おそらく、古い Box ファイルに入っていた VartualBox ゲストアディッションが古くて、動いていなかったのでしょうね。
そのための
config.vm.box_check_update = true
な気がしますが、期待通りに動いていなかったということになります。何をチェックしているのだろう。。。
Putty でゲスト OS に ssh
最後に、ssh クライアントの Putty でゲスト OS(127.0.0.1:2222)に繋ぐときの認証の話。
去年の夏に試したときは、同じ暗号鍵を使い回していたようですが、今回試したところ、CentOS/7 ではどうも違うようです。
色々探してみたところ、
.vagrant\machines\default\virtualbox\private_key
を使っているようなので、これを PuttyGen ツールで Putty 用に変換。Putty の「接続」→「SSH」→「認証」→「認証のためのプライベートキーファイル」で変換後のキーファイルを指定して接続すると、Putty からユーザー名「vagrant」のノーパスワードでログイン可能でした。
また、ubuntu/xenial64 では、CentOS/7 と違って、公開鍵認証ではなく、パスワード認証でした。で、ユーザー名は、vagrant up 時の出力に「ubuntu」とあるので分かるのですが、パスワードが分からない。
調べたところ、
C:\Users\ユーザー名\.vagrant.d\boxes\ubuntu-VAGRANTSLASH-xenial64\20170721.0.0\virtualbox\Vagrantfile
にしっかりと書いてました。
同じ、vagrant 用の box ファイルでも、作成者によって色々と方針が違うのですねぇ。勉強になります。