続・Windowsでも(略
VagrantでAnsibleを使ってvagrant provision
するときに、Vagrantfileに以下のように書くんですが
config.vm.provision :ansible do |ansible|
ansible.playbook = "site.yml"
ansible.inventory_path = "ansible_hosts"
ansible.extra_vars = { foo:'bar' }
ansible.verbose = "extra"
end
このextra_varsが曲者で、渡す値が1組なら問題ない(とりあえず意図通り動くという意味で)のですが、値を2組渡すと実行時にエラーになっちゃいます。
config.vm.provision :ansible do |ansible|
ansible.playbook = "site.yml"
ansible.inventory_path = "ansible_hosts"
ansible.extra_vars = { foo:'bar', baz:'zoo' }
ansible.verbose = "extra"
end
エラー内容はこんな感じ
ERROR: the playbook: baz=zoo could not be found
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
extra_varsに設定したはずのパラメータがなぜかplaybookとして扱われる模様。 ログに出力された実行したと思われるコマンドを見るとこんな感じ。
c:\cygwin\bin\python2.7.exe c:\cygwin\bin\ansible-playbook --private-key=C:/Users/xxxx/.vagrant.d/insecure_private_key --user=vagrant "--extra-vars="foo=bar baz=zoo"" --inventory-file=ansible_hosts -vvv site.yml
extra_vars周りが余分な""で囲まれていて、baz=zooが裸→ansible-playbookコマンドにとってはplaybookのように見えてるのかな・・・と。
で、このままだと困るので一応回避策。
config.vm.provision :ansible do |ansible|
ansible.playbook = "site.yml"
ansible.inventory_path = "ansible_hosts"
ansible.raw_arguments = "--extra-vars=\\\"foo=bar\\\" \\\"baz=zoo\\\""
ansible.verbose = "extra"
end
ソースを読んだ結果、raw_arguments
を発見。
コメントが恐ろしい感じだけどとりあえず気にしない。
これにより
c:\cygwin\bin\python2.7.exe c:\cygwin\bin\ansible-playbook --private-key=C:/Users/xxxx/.vagrant.d/insecure_private_key --user=vagrant "--extra-vars=\"foo=bar\" \"baz=zoo\"" --inventory-file=ansible_hosts -vvv site.yml
になって、ちゃんと複数のextra_varsが認識される。
オマケ。
verbose
って公式ドキュメントを読む限り真偽値だと思ってたら、ソースを読んだら"extra"という文字列でも指定できて、そうすると-vvv
として実行されるのでより詳しいログが出てきます。