drpsychick.ansible_testing

Ansible テスト

ビルドステータス ライセンス PayPal GitHubスポンサー

Ansible ロールをテストするための完全に機能する SystemD の Docker コンテナを作成します。 libvirt を使用すると、Windows の仮想マシンを自動でプロビジョニングし、WinRM でロールをテストできます。 Linux ボックスに Docker (および必要に応じて libvirt)がインストールされている環境で実行することを目的としています。

設定

defaults/main.yml を確認して、コンテナを定義し、ニーズに合わせて調整してください。

  • 独自の work_dir を定義します。内容は一時的で、destroy で削除されます!
  • 起動したいコンテナを定義します。

概要

このロールには、コンテナと仮想マシンのための create および destroy タスクがあります。設定されたリストをループし、インスタンスを作成します。 各 Molecule シナリオは、コンテナまたは仮想マシンのいずれかのみを使用する必要があります。Molecule はシナリオごとに単一のドライバーのみをサポートします。

Linux: /sbin/init で起動する特権のある Docker コンテナを作成し、完全な SystemD 対応インスタンスを持ちます。

Windows: VM(Windows の無人インストール)を作成し、初回起動時に Ansible 用に WinRM (プレーン HTTP)を設定します。

ヒント: Windows の VM の作成には時間がかかり、10 分以上かかる場合があります。

貢献

テストしたい他のシステムがある場合は、追加の Dockerfile や libvirt 設定の PR を提供してください。

貢献は非常に簡単です:

  1. GitHub でプロジェクトをフォークする: https://github.com/DrPsychick/ansible-testing
  2. Linux ボックスでフォークをチェックアウトする
  3. ロールの Molecule シナリオにフォークのシンボリックリンクを作成する(例: ./molecule/default/
  4. 変更を加え、満足するまでロールでテストする - コミットしてプルリクエストを作成する
  5. GitHub Actions をローカルで実行して迅速なフィードバックを得ることができます: https://nektosact.com/installation/index.html
GitHubName=YourName
YourRoleDir=/This/Is/Your/Role/Directory/MyRole
YourRoleName=MyRole
WhereYourForkIs=/This/Is/Where/You/Clone/Your/Fork

# フォークをクローンする
cd $WhereYourForkIs
git clone https://github.com/$GitHubName/ansible-testing.git

# ローカルバージョンのシンボリックリンクを作成する
cd $YourRoleDir/molecule/default
ln -s $WhereYourForkIs/ansible-testing drpsychick.ansible_testing

# 要件のロールをコメントアウトし、ダウンロードしたバージョンを削除する
sed -i -e 's/^ /# /' requirements.yml
rm -rf ~/.cache/molecule/$YourRoleName/default/roles/drpsychick.ansible_testing

これで molecule を実行すると、シンボリックリンクを使用して drpsychick.ansible_testing ロールを含めることができます。 変更を加え、定期的にコミットし、完成したらプルリクエストを忘れずに作成し、他の人もあなたの改善点を活用できるようにしましょう。また、ローカルフォークディレクトリで molecule test を実行して、ロール自体をテストできます。

使用方法

必要条件:

  • Linux (特権モードでコンテナを生成し、/sys/fs/cgroup をバインドするため)
  • Docker
  • libvirt (Windows 仮想マシン用)

Docker コンテナでのテスト(Linux)

必要条件

  • pip3 install -U molecule molecule-docker

Ansible molecule と一緒に

molecule init role <name> で新しいロールを作成するか、既存のロールディレクトリの Molecule シナリオを molecule init scenario default で初期化します。

このリポジトリの例ファイルをダウンロードします(createdestroy で使用されます):

for f in create destroy molecule requirements vars; do
  curl -o molecule/default/$f.yml https://raw.githubusercontent.com/DrPsychick/ansible-testing/main/docs/molecule/default/$f.yml
done

molecule/default/vars.yml を調整して、プロビジョニングするコンテナを定義します。 その後、molecule/default/molecule.ymlplatforms を適切に調整します。

vars.yml

work_dir: "/tmp/ansible-testrole-default"
containers:
  - { name: fedora40, os: fedora, dockerfile: Dockerfile_Fedora, files: ["entrypoint.sh"], args: { VERSION: 40 } }
  - { name: ubuntu2404, os: ubuntu, dockerfile: Dockerfile_Ubuntu, files: ["entrypoint.sh"], args: { VERSION: 24.04 } }
  - { name: centos7, os: centos, dockerfile: Dockerfile_CentOS, files: ["entrypoint.sh"], args: { VERSION: 7 } }

molecule.yml

[...]
platforms:
  - name: fedora40
  - name: ubuntu2404
  - name: centos7
[...]

Molecule を実行します

# ステップを個別に実行
molecule dependency
molecule create
molecule prepare
molecule converge
molecule idempotence
molecule verify
molecule cleanup
molecule destroy

# すべてを一度に実行
molecule test

スタンドアロン

独自のプレイブックを書くか、tests にあるプレイブックを使用します

ansible-galaxy install -r requirements.yml

# tests/provision.yml をニーズに合わせて編集
echo "[defaults]
roles_path = .." > ansible.cfg

# コンテナを作成する
ansible-playbook tests/create.yml

# コンテナを削除する
ansible-playbook tests/destroy.yml

Windows VM でのテスト

必要条件

  • libvirt, libvirt-clients, virtinst をインストールする
  • ansible-galaxy community.libvirt
  • Ansible が WinRM に接続するため: python3-winrm
  • defaults/main.yml を参照
    • お好みの Windows イメージをダウンロードする(テストは Windows 2016 用にセットアップされています)
    • VirtIO ISO をダウンロードする
    • 両方の ISO を libvirt_iso_dir に配置する
# ISO をダウンロードする
sudo curl -Lo /var/lib/libvirt/isos/WindowsServer2016.iso http://care.dlservice.microsoft.com/dl/download/1/6/F/16FA20E6-4662-482A-920B-1A45CF5AAE3C/14393.0.160715-1616.RS1_RELEASE_SERVER_EVAL_X64FRE_EN-US.ISO
sudo curl -Lo /var/lib/libvirt/isos/virtio-win.iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

ユーザーとして libvirt を使用する(sudo 無し)

ユーザーが書き込めるように image および iso プールを作成し、プールの権限を適切に設定します。 ユーザーが次のグループに属していることを確認します。

sudo virsh pool-create-as myisos dir --target /mydir/libvirt/isos
sudo virsh pool-edit isos # 権限を設定する

sudo virsh pool-create-as myimages dir --target /mydir/libvirt/images
sudo virsh pool-edit images2 # 権限を設定する

molecule/libvirt/vars.yml でディレクトリとプールを参照してください。

libvirt_image_dir: "/mydir/libvirt/images"
libvirt_iso_dir: "/mydir/libvirt/isos"
libvirt_disk_pool: "myimages"

Ansible molecule と一緒に

新しいロールを molecule init role <name> で作成するか、既存のロールディレクトリの Molecule シナリオを molecule init scenario default で初期化します。

このリポジトリの例ファイルをダウンロードします(createdestroy のため):

for f in create destroy molecule requirements vars; do
  curl -o molecule/libvirt/$f.yml https://raw.githubusercontent.com/DrPsychick/ansible-testing/main/docs/molecule/libvirt/$f.yml
done

molecule/libvirt/vars.yml を調整して、プロビジョニングするコンテナを定義します。 その後、molecule/libvirt/molecule.ymlplatforms を適切に調整します。

# シナリオ "libvirt" を実行する
molecule test -s libvirt

スタンドアロン

ansible-galaxy install -r requirements.yml

# tests/provision.yml をニーズに合わせて編集
echo "[defaults]
roles_path = .." > ansible.cfg

# 仮想マシンを作成する
ansible-playbook tests/create_vm.yml

# 仮想マシンを削除する
ansible-playbook tests/destroy_vm.yml

事前定義された Windows イメージを使用してプロビジョニングを高速化

2 つの Windows インスタンスを事前定義されたイメージで完全に立ち上げるのに 4 分未満 かかりました。

  1. qcow2 イメージを作成するか、無人インストールで一度 VM をプロビジョニングします。
  2. すぐに使える VM から zip を作成します: zip windows2016-clean.qcow2.zip windows2016.qcow2 (ファイル名は一致させて、zip ファイルのルートに配置する - パスは不要)
  3. zip ファイルを libvirt_iso_dir に移動するか、URL で提供します(disk_image_url

異なる Ansible バージョンでローカルテストを実施

python3-venv が必要です。

# バージョン 16 と最新は失敗する
# ERROR! Unexpected Exception, this is probably a bug: cannot import name 'should_retry_error' from 'ansible.galaxy.api'
ANSIBLE_VERSION=15
python3 -m venv .venv
. .venv/bin/activate
pip3 install --upgrade pip setuptools wheel
pip3 install --requirement requirements-ansible_${ANSIBLE_VERSION}.txt

molecule test
プロジェクトについて

role for molecule to spin up systemd docker containers or libvirt VMs to test your ansible roles with

インストール
ansible-galaxy install drpsychick.ansible_testing
ライセンス
mit
ダウンロード
1.7k
所有者
individual, curious, human