TL;DR
- Ansible Moleculeでのテストの実装はコツがいる
 
経緯
Ansible MoleculeでAnsibleのroleをテストしたが、結構コツがいるようだったので、メモ。
まず、現時点(2022/9/27)で日本語で言及している記事自体が少ない。以下は参照にさせていただいた。
ポイントは以下。
- 以下の流れで行う(https://molecule.readthedocs.io/en/latest/getting-started.html#run-test-sequence-commands)
molecule create (1.Dockerコンテナの生成、起動) molecule converge (2.対象ののロールの実行) molecule verify (3.テスト) molecule destroymolecule testで一連の動作をまとめて実行できるとの記載があるが、自分の環境ではverifyがされていないので利用していない- 途中でコケたら、
molecule loginでコンテナにログインして実際のコマンドを実行するなどして確認する 
 - 1.Dockerコンテナの生成、起動
molecule.ymlを設定するimageにてDockerコンテナのタグを指定する- 例えば
ubuntu:22.04を指定した場合、python3がインストールされていないためにansibleの各種タスクが実行できずにコケる。また、sudoもインストールされていないため、該当のタスクがbecome: yesを指定しているとやはりコケる。対策としてcommandを指定する。 
platforms: - name: instance image: ubuntu:22.04 command: - "apt update" - "apt install -y sudo python3" pre_build_image: true
 - 2.対象ののロールの実行
converge.ymlを設定する…が、通常初期値で問題ないはず。他のタスクも実行したい場合は修正が必要なのかも
 - 3.テスト
verify.ymlを設定する。- assertタグでうまくいけばTrueとなるよう設定する。ファイルの存在をチェックする場合は以下のような感じ
 
- name: Register if file exists stat: path: "/path/to/file" register: path_to_file - name: Check if file exists ansible.builtin.assert: that: path_to_file.stat.existsansible_envによる変数はverify時には取得できずにエラーとなる。実際の値を入れておいてやる必要がある。