Ansible公式Docでは、ディレクトリーレイアウトのBest practiceは以下のように定義されている。
Best Practices — Ansible Documentation
また、公式Docには明確な記述がないが、以下の記事ではAnsibleの開発者が、
ansible-playbookコマンドの-iオプションでディレクトリーを指定できることを認めている。
ところが、Packer(確認バージョン: 0.12.2)のAnsible Local provisionerでは
コンフィギュレーションの"inventory_file"でディレクトリーを指定するとエラーとなる。
1 2 3 4 5 | { "type" : "ansible-local" , "playbook_file" : "playbook.yml" , "inventory_file" : "inventories/test" } |
1 2 3 | 1 error(s) occurred: * inventory_file: inventories /test must point to a file |
また、"inventory_file"の指定をやめ、
"extra_arguments"で-iオプションでディレクトリーを指定しても、
Packerが自動的にinventoryファイルを生成して-iオプションを重複指定してしまい、
inventoryディレクトリー内のhost_vars, group_varsなどが正しく読み込まれない。
1 2 3 4 5 6 7 8 | { "type" : "ansible-local" , "playbook_file" : "playbook_dummy.yml" , "extra_arguments" : [ "-i" , "inventories/test" ] } |
1 | cd /tmp/packer-provisioner-ansible-local && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/playbook .yml -i inventories /test -c local -i /tmp/packer-provisioner-ansible-local/packer-provisioner-ansible-local138537763 |
ここでAnsible Local provisionerのコンフィギュレーションで"host_vars"や"group_vars"を指定すると、
Packerは指定されたhost_varsやgroup_varsのディレクトリーを
/tmp/packer-provisioner-ansible-local直下に複製する動きになるようだ。
しかし、先ほどのAnsible公式Docの
ディレクトリーレイアウトのBest practiceを見れば分かるように、
Ansibleのプロジェクトディレクトリー直下には
playbookの"host_vars"や"group_vars"が既に存在しており、
開発者の意図と異なる動作となる。
Ansibleの公式Docでは変数の読み込み優先度が明確に示されており、
Ansibleプロジェクトのディレクトリー構成は開発者が意図をもって設計しているものだ。
Variables — Ansible Documentation
しかし、なぜかPackerのAnsible Local provisionerは
Ansibleプロジェクトのディレクトリー構成を変更したがる実装になっているので、
当面の間は以下の方法で問題を回避することにした。
1 2 3 4 5 6 7 8 9 10 | { "type" : "ansible-local" , "playbook_file" : "playbook_dummy.yml" , "playbook_dir" : "./" },{ "type" : "shell" , "inline" : [ "cd /tmp/packer-provisioner-ansible-local && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/playbook.yml -c local -i /tmp/packer-provisioner-ansible-local/inventories/test" ] } |
ちなみにplaybook_dummy.ymlの中身は以下の通り。
1 | - hosts: localhost |
投稿者プロフィール
最新の投稿
AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
セキュリティ2021年7月14日ゼロデイ攻撃とは
セキュリティ2021年7月14日マルウェアとは
WAF2021年7月13日クロスサイトスクリプティングとは?