推奨ソリューション
これに対処するための推奨される方法は、複数のMolecule Scenariosを使用することです。シナリオをデフォルトとして使用し、アンインストール手順を実行してテストするだけinstall
の 2 つ目のシナリオを追加できます。uninstall
これを設定するときは、ロールのmolecule
フォルダーに 2 つ目のシナリオ ディレクトリを作成し (コピーしてdefault
)、いくつかの変更を加えます。
(編集: このステップは分子 < 3.0 に必要でした。scenario.name
後のバージョンでは削除されました)ファイルmolecule.yml
でscenario.name
属性を にuninstall
変更します。
同じファイルで、default
シナリオのplaybook.yml
ファイルをprepare
ステップのプレイブックとして使用します。
provisioner:
name: ansible
playbooks:
prepare: ../default/playbook.yml
converge: playbook.yml
uninstall
シナリオのテストを調整して、アンインストール手順を確認します。
これにより、インストール/デフォルトのシナリオと同じ手順でソフトウェアをインストールできるようになり、アンインストールの手順に集中できます。
シナリオを実行するには、すべてのシナリオまたは 1 つのシナリオを実行できます。
# Run all scenarios
molecule test --all
# Run only the uninstall scenario
molecule test --scenario-name uninstall
これにより、コードを複製することなく、やりたいことにかなり近づけることができます。
他のことを試してみたい場合は、他のいくつかの考えがあります。
代替案
install_uninstall
必要なすべてのテスト (リント、冪等性、チェック、検証など) を実行し、特定のシナリオを作成するインストールのみのシナリオを保持します。
再生install_uninstall
は決して冪等ではありません。したがって、このシナリオでは、絶対に合格しない冪等性テストを無効にする必要があります。lint など、他のシナリオで実行されるチェック テストを無効にすることもできます。これは、次molecule.yml
のパラメータを調整することで実行できscenario.test_sequence
ます。
scenario:
name: install_uninstall
test_sequence:
- destroy
- create
- prepare
- converge
- verify
- destroy
もちろん、実際のニーズに合わせて調整できます (この場合の testinfra テストがない場合に verify を削除するなど)。
これが完了したら、シナリオ プレイブックに 2 つのプレイを追加するだけです。
---
- name: install
hosts: all
roles:
- role: my_role
install: true
- name: uninstall
hosts: all
roles:
- role: my_role
install: false
そして、次のものでテストする準備ができているはずです:
molecule test -s install_uninstall
編集: 別のオプションは、現在のインストール シナリオのみを保持し、完全なテストではなく、個々の分子コマンドを起動することです。現在の作業シナリオがdefault
# Check and lint my files
molecule lint
# Make sure no box/container is on the way
molecule destroy
# Create my box/container for tests
molecule create
# Play my default playbook
molecule converge
# Idempotency check
molecule idempotence
# Verify we can correctly use check mode
molecule check
# Play testinfra tests
molecule verify
# Now play the uninstall
molecule converge -- -e install=false
## add more tests you can think off ##
# and finally cleanup
molecule destroy.
残念ながら、この機能が最近分子に追加された場合を除き、余分な変数を使用してidempotency
andを呼び出すことはできません。check