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 destroy
molecule 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.exists
ansible_env
による変数はverify時には取得できずにエラーとなる。実際の値を入れておいてやる必要がある。