この記事は Ansible Advent Calendar 2024 の 9日目の記事です。
はじめに
コレクションというと、モジュールやプラグイン、ロールを含む単位のイメージが強いかもしれませんが、Playbook も含めることができます。
たとえば、local.sakana コレクションに install.yml という Playbook がある場合、ansible-playbook コマンドなどからは、local.sakana.install という指定で Playbook を呼べます(拡張子はなくてもOK)。
最近、Plyabook のファイル名に - (ハイフン)は使えないという制約があることを知りました。
The dash - character is not valid for playbook names in collections
少し気になったので試してみます。
検証環境
- ansible-core 2.16.6
おためし
コレクション内にハイフンあり、なしの Playbook をそれぞれ仕込んでおきます。playbooks ディレクトリに格納するのは、そういう仕様のためです。
~/.ansible/collections/ansible_collections/
└── local
└── sakana
└── playbooks
├── test-playbook.yml
└── test_playbook.yml
Playbook は、ただ debug するだけの簡単なものです。
- なし(代わりに _)の Playbookの場合、正常に実行できます。
% ansible-playbook -i localhost, local.sakana.test_playbook
PLAY [localhost] **************************************************************************************************
TASK [ansible.builtin.debug] **************************************************************************************
ok: [localhost] => {
"msg": "Hello world!"
}
PLAY RECAP ********************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
続いて - ありの場合、Playbook が見つからないエラーになりました。.yml をつけても同じでした。
% ansible-playbook -i localhost, local.sakana.test-playbook ERROR! the playbook: local.sakana.test-playbook could not be found
なお、コレクション内の Playbook としての指定ではなく、普通のファイルパスで指定する分には - ありでも実行できます。この場合は、拡張子まで必須です。
% ansible-playbook -i localhost, ~/.ansible/collections/ansible_collections/local/sakana/playbooks/test-playbook.yml
PLAY [localhost] *************************************************************************************************************************************************************
TASK [ansible.builtin.debug] *************************************************************************************************************************************************
ok: [localhost] => {
"msg": "Hello world!"
}
PLAY RECAP *******************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
おわりに
Ansible は、グループ名に - を使うと警告が表示されたり、ロール名は -を使わない規則にしているコレクションがあったり、たまに - を使うと都合が悪い時があります。
そんなこともあって、どちらかというと私は _ を使うことが多いです。