Ansible公式Docでは、ディレクトリーレイアウトのBest practiceは以下のように定義されている。
Best Practices — Ansible Documentation
また、公式Docには明確な記述がないが、以下の記事ではAnsibleの開発者が、
ansible-playbookコマンドの-iオプションでディレクトリーを指定できることを認めている。
ところが、Packer(確認バージョン: 0.12.2)のAnsible Local provisionerでは
コンフィギュレーションの"inventory_file"でディレクトリーを指定するとエラーとなる。
{ "type": "ansible-local", "playbook_file": "playbook.yml", "inventory_file": "inventories/test" }
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などが正しく読み込まれない。
{ "type": "ansible-local", "playbook_file": "playbook_dummy.yml", "extra_arguments": [ "-i", "inventories/test" ] }
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プロジェクトのディレクトリー構成を変更したがる実装になっているので、
当面の間は以下の方法で問題を回避することにした。
{ "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の中身は以下の通り。
- hosts: localhost
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?