Windowsでもansible使ってvagrant provisionしたい
ゴチャゴチャいろいろやったのを記憶を頼りにまとめてみます。
vagrantをインストール
これは本家サイトからmsiパッケージをダウンロードしてインストールすれば良い
ついでに
vagrant-ansible
プラグインもインストールansibleをインストール
cinst python cinst pip pip install ansible
は何となく成功するものの、
ansible
起動でなんかのモジュールが見つかりませんとか言われてコケる。cygwin
でおkという記事を見たのでその通りに方針転換。記事通りおk。playbook.ymlとかinventoryファイルを作る
まずは超簡単にplaybook.yml
- hosts: vagrant tasks: - yum: name=/common/files/jdk-7u40-linux-x64.rpm state=present sudo: yes
ついでにinventoryファイル
[vagrant] vagrant
inventoryにはIPを書かないで、後述のssh-configで設定した。
Vagrantfileをいじる
Provisioningの設定 config.vm.provision :ansible do |ansible| ansible.playbook = "site.yml" ansible.inventory_path = "ansible_hosts" ansible.verbose = true end
ホストオンリーネットワークの設定 config.vm.network :private_network, ip: "192.168.192.168"
ssh-configの設定を書く
Host vagrant HostName 192.168.192.168 User vagrant IdentityFile ~/.ssh/vagrant_insecure_key StrictHostKeyChecking no UserKnownHostsFile /dev/null
HostNameにはVagrantfileで設定したIPを指定。1VMずつしか動かせない気がするのでココは課題・・・。あとは
vagrant ssh
するときと同様の情報を設定。ここまで出来たら
vagrant provision
Failed to load the "vagrant-ansible" plugin. View logs for more details.
こんな警告が出るがとりあえず無視して処理は進む。お、いけるか?と思いきや
The executable 'ansible-playbook' Vagrant is trying to run was not found in the %PATH% variable. This is an error. Please verify this software is installed and on the path.
と言われてコケる。 単独で
ansible-playbook
とやればコマンドは発動するので(;∀;)となるが、ansible-playbookはPythonスクリプトなので、Windowsでは動かない。ぐーぐる先生のお力を借りてbatでラップしちゃう。c:\cygwin\bin\python2.7.exe c:\cygwin\bin\ansible-playbook %*
こんなbatファイルをPATH内のどっかに置いてやればおk。
まずはansibleで実行。
ansible-playbook -i ansible_hosts -vvvv site.yml
-vvvv
はログを詳細に表示してくれるオプション。 たまに?(結構頻繁)にSSHがエラーを起こす(原因不明調査中)のでそのために付けてます。いよいよvagrantで実行
vagrant provision
こいつもSSH接続で結構エラーを起こす。認証まわりっぽいがよく分からない。。。 うまくいけばProvisioningされて、JDKがインストールされてハッピーになれます。
6でbatファイルを作る必要があるのがミソでしょうか・・・。
以上、Windowsで頑張ってみた話でした。