こんにちは。クラウドインフラの深淵を覗き、日々「自動化の美学」を追求しているエンジニアです。
今日は、Ansible運用における「最後のピース」とも言えるMolecule v5の世界へ皆さんを招待します。
「Ansibleを書いた後、手作業でサーバーにログインして確認している」……そんな時代はもう終わりです。Moleculeを使えば、コードを保存した瞬間に、Dockerコンテナ上でマルチOSのテストが走り、仕様通りに動いているかをプログラムが自動判定してくれます。
今回は、現場で即戦力となるMolecule v5の構築術を、最短距離で解説します。
—
1. Moleculeは「守護神」である
Moleculeは、単なるテストツールではありません。あなたの書いたAnsible Roleが、「冪等性(何度実行しても結果が同じになる性質)」を維持しているかを強制的に証明するためのフレームワークです。
- なぜv5なのか?: 以前のバージョンより構成がシンプルになり、`pytest`との親和性が格段に向上しました。Pythonの強力なエコシステムをそのままテストに持ち込めるため、表現力が段違いです。
2. 環境構築:まずは「隔離された実験室」を作る
Moleculeを動かすために、余計な依存関係をホストOSに散らさないでください。`venv`(仮想環境)を使うのがプロの流儀です。
プロジェクトディレクトリを作成
mkdir my-ansible-role && cd my-ansible-role
仮想環境を作成して有効化
python3 -m venv .venv
source .venv/bin/activate
必要なパッケージをインストール
molecule-plugins[docker] を選ぶのが今風です
pip install “molecule[ansible,testinfra]” molecule-plugins[docker]
3. Moleculeの初期化:魔法のコマンド
Roleのディレクトリで以下のコマンドを叩いてください。これだけで、テストの雛形が完成します。
molecule init scenario default -r my_role_name
ここで生成される `molecule/default/molecule.yml` が、すべての設定を司る心臓部です。
4. 現場で震えるほど役立つ `molecule.yml` の極意
複数のOS(Ubuntu 22.04, Rocky Linux 9など)で並列テストを実行するための、実戦的な設定です。
—
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: instance-ubuntu
image: geerlingguy/docker-ubuntu2204-ansible:latest
pre_build_image: true
- name: instance-rocky
image: geerlingguy/docker-rockylinux9-ansible:latest
pre_build_image: true
provisioner:
name: ansible
options:
vv: true # 詳細なログを出す
verifier:
name: testinfra # pytestベースの検証
5. HelloWorldを超えた「テストの書き方」
`molecule/default/tests/test_default.py` を開きましょう。ここが一番面白いところです。
「パッケージがインストールされているか」「サービスが起動しているか」をPythonコードで記述します。
import testinfra
def test_nginx_is_installed(host):
# nginxパッケージがインストールされているか確認
nginx = host.package(“nginx”)
assert nginx.is_installed
def test_nginx_is_running(host):
# サービスが起動し、有効化されているか確認
nginx = host.service(“nginx”)
assert nginx.is_running
assert nginx.is_enabled
6. テスト実行:自動化の快感を味わう
準備は整いました。以下のコマンドを打てば、Dockerコンテナが立ち上がり、Ansibleが適用され、テストが走り、終了後にコンテナが破棄されます。
molecule test
このコマンドが成功した時、あなたのRoleは「どの環境でも安心して動く」というお墨付きを得たことになります。
—
先輩エンジニアからのアドバイス
最初はエラーが出ても落ち込まないでください。むしろ、「手作業でデプロイする前にエラーを見つけられた」という幸運に感謝しましょう。
- 冪等性の担保: `molecule test` はデフォルトで「二回連続実行」を試みます。二回目の実行で「Changed」が出たら、それは冪等性が崩れている証拠です。これを修正し続けることが、最高のインフラエンジニアへの近道です。
さあ、Moleculeを導入して、手作業による不安から解放されましょう。自動化こそが、エンジニアに「自由な時間」と「確実な品質」をもたらす唯一の手段なのですから。
質問があればいつでもどうぞ。あなたのコードが美しく自動化される日を応援しています。