統合テスト¶
トピック
Ansible 統合テストシステム。
Playbook による Playbook のテスト
テストによっては認証情報が必要になる場合があります。 認証情報は credentials.yml で指定できます。
テストによっては root が必要になる場合があります。
クイックスタート¶
python パッケージ argcomplete
をインストールし、アクティベートすることが強く推奨されます。
これにより、テストランナー ansible-test
に bash
のタブ補完が提供されます。
構成¶
ansible-test コマンド¶
以下の例では、bin/
が $PATH
にあることを前提としています。それを行う簡単な方法は、
env-setup
コマンドで環境を初期化します。
source hacking/env-setup ansible-test –help
ansible-test
は、完全パスで呼び出すこともできます。
bin/ansible-test –help
integration_config.yml¶
独自のバージョンの integration_config.yml
を作成すると、
調整可能なパラメーターを設定して、自分の環境でより良いテストを実行する助けとなります。 一部のテスト (例: クラウド) は、
アクセス認証情報が提供されている場合に限り実行します。 サポートされている認証情報の詳細は、
test/integration/
ディレクトリーにある、
各種ファイル cloud-config-*.template
を参照してください。
要件¶
いくつかのテストでは、hg、svn、git のようなものがインストールされていて、パスに入っていることを前提としています。 (Amazon Web Services 用のものなどの) 一部のテストでは、 個別の定義が必要になります。 これは、本ガイドの後半に記載されています。
(完全はリストは後に追加されます)
非破壊テスト¶
これらのテストはサブディレクトリー内のファイルを修正しますが、 パッケージやテストのサブディレクトリー以外にあるものをインストールしたり削除したりするようなことはしません。 また、システムサービスの再設定やバウンスも行いません。
Note
Docker 内での統合テストの実行
統合テストによる潜在的な変更からシステムを守り、適切な依存関係セットが利用可能になるようにするには、常に --docker
オプションをつけて統合テストを実行することが推奨されます。オプションについては、「サポートされる docker イメージの一覧」を参照してください。
Note
新規 Docker イメージのプルの回避
最新のコンテナーイメージをプルしないようにするには、--docker-no-pull
オプションを使用します。これは、ダウンロードに利用できないカスタムのローカルイメージを使用する場合に必要です。
CI システムで実行されたすべての POSIX プラットフォームテストに対して、次を実行します。
ansible-test integration –docker fedora29 -v shippable/
個々のモジュールなど、特定のテストを対象とすることもできます。
ansible-test integration -v ping
利用可能なターゲットの一覧を表示するには、以下のコマンドを実行します。
ansible-test integration –list-targets
Note
Bash ユーザー
argcomplete
で bash
を使用する場合は、ansible-test integration <tab><tab>
を実行して完全な一覧を取得します。
破壊テスト¶
これらのテストでは、いくつかの簡単なパッケージのインストールと削除が許可されています。 おそらく、Docker のような仮想環境に、 これらを割り当てたいと考えるでしょう。 ファイルシステムを再フォーマットすることはありません。
ansible-test integration –docker fedora29 -v destructive/
Windows テスト¶
これらのテストには、winrm
接続プラグインと Windows モジュールが使用されます。 テストに使用するリモートの Windows 2008 Server、
または Windows 2012 Server でインベントリーを定義して、
PowerShell Remoting を有効にして継続する必要があります。
これらのテストを実行すると、Windows ホストが変更される可能性があるため、 実稼働環境や重要な Windows 環境では実行しないでください。
PowerShell Remoting を有効にします (リモートデスクトップを介して Windows ホストで実行します):
Enable-PSRemoting -Force
Windows インベントリーを定義します。
cp inventory.winrm.template inventory.winrm ${EDITOR:-vi} inventory.winrm
CI システムで実行する Windows テストを実行します:
ansible-test windows-integration -v providepable/
Docker コンテナーでのテスト¶
Docker がインストールされた Linux システムをお持ちの場合は、 Ansible の継続的インテグレーション (CI) システムで使用されているものと同じ Docker コンテナーを使用して統合テストを実行することが推奨されます。
Note
Linux 以外の Docker
Docker Engine を使用して (macOS などの) Linux 以外のホストで Docker を実行することは推奨されません。
テストに使用されるイメージによっては、テストが失敗する場合があります。
(network-integration
または windows-integration
ではなく) integration
の実行時に --docker-privileged
オプションを使用すると、問題が解決する可能性があります。
レガシーのクラウドテスト¶
一部のクラウドテストは通常の統合テストとして実行され、その他はレガシーテストとして実行されます。 詳細は、「レガシー統合システムを使用したテスト」ページを参照してください。
クラウドテストのその他の設定¶
テストを実行するには、
test/integration ディレクトリーに、
cloud-config-aws.yml
または cloud-config-cs.ini
という名前のファイルにアクセス認証情報を指定する必要があります。構文ヘルプでは、対応する .template ファイルを利用できます。 新しい AWS テストは、
test/integration/cloud-config-aws.yml ファイルを使用するようになりました。
AWS の IAM ポリシー¶
AWS アカウントでテストを実行するには、Ansible にはかなり幅広い権限が必要になります。 この権限は専用ユーザーに提供できます。テストを実行する前に設定する必要があります。
testing-policies¶
hacking/aws_config/testing_policies
には、既存のすべての AWS モジュールテストに必要なポリシーのセットが含まれます。
Playbook hacking/aws_config/setup_iam.yml
を使用すると、これらのポリシーをすべて IAM グループに追加できます。
これには、-e iam_group=GROUP_NAME
を使用します。グループの作成が完了したら、ユーザーを作成し、
ユーザーをグループのメンバーにする必要があります。ポリシーは、そのユーザーの権限を最小限に抑えるために設計されています。 このポリシーではユーザーを 1 つのリージョンに制限していますが、
完全にユーザーを制限しているわけではないことに注意してください
(主に Amazon ARN 表記の制限のため)。ユーザーにはアカウント定義を閲覧するための幅広い権限が与えられ、
テストに関係のない一部のリソースを管理することもできます (例えば、別の名前の AWS ラムダなど)。 どのような場合でも、
本番環境のプライマリーのアカウントでは、テストを実行しないでください。
ネットワークテスト¶
Ansible 2.4 以降、すべてのネットワークモジュールには、すべての機能をカバーするユニットテストが含まれていなければなりません。新しいネットワークモジュールごと、および追加された機能ごとにユニットテストを追加する必要があります。ユニットテストとコードは 1 つの PR にまとめて提出してください。統合テストも強く推奨されます。
ネットワーク統合テストの作成¶
ネットワークテストの記述に関するガイダンスは、「adding tests for Network modules guide」を参照してください。
ネットワーク統合テストのローカルでの実行¶
Ansible では Shippable を使用して、その PR で導入された新しいテストも含め、すべての PR で統合テストスイートを実行します。ネットワークモジュールの問題を見つけて修正するには、PR を提出する前にローカルでネットワーク統合テストを実行します。
ネットワーク統合テストを実行するには、次の形式でコマンドを使用します。
ansible-test network-integration –inventory /path/to/inventory tests_to_run
まず、ネットワークインベントリーファイルを定義します。
cd test/integration cp inventory.network.template inventory.networking ${EDITOR:-vi} inventory.networking # Add in machines for the platform(s) you wish to test
特定のプラットフォームでネットワークテストをすべて実行するには、次のコマンドを実行します。
ansible-test network-integration –inventory /path/to/ansible/test/integration/inventory.networking vyos_.*
この例では、すべての VyOS モジュールに対して実行されます。vyos_.*
は、bash ワイルドカードではなく正規表現の一致であることに注意してください。この例を変更した場合は、. を含めます。
特定のモジュールに対してインテグレーションテストを実行するには、次のコマンドを実行します。
ansible-test network-integration –inventory /path/to/ansible/test/integration/inventory.networking vyos_vlan
特定のモジュールでテストケースを 1 つ実行するには、次を実行します。
# Only run vyos_vlan/tests/cli/basic.yaml ansible-test network-integration –inventory /path/to/ansible/test/integration/inventory.networking vyos_vlan –testcase basic
特定のトランスポートでインテグレーションテストを実行するには、次を実行します。
テストに実装する方法は、`test/integration/targets/nxos_bgp/tasks/main.yaml を参照してください。
その他のオプションは、次のコマンドを実行すれば確認できます。
ansible-test network-integration –help
本書で示したもの以外にヘルプやフィードバックが必要な場合は、Freenode の #ansible-network
にアクセスしてください。
その他の詳細情報¶
Ansible テストを改善する詳細な計画を確認したい場合は、「Testing Working Group」にご参加ください。