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日クロスサイトスクリプティングとは?


