テスト用のplaybookで利用できるモジュールたち
Ansibleでテスト用のplaybookを書く時の、一般的な使い方をまとめておきます。
環境情報
- ansible 2.7.10
wait_forモジュール
wait_for
モジュールは、ある条件に合致するまで処理を待ってくれる(条件に合致しない場合タイムアウトする)というモジュールです。
port生死の確認
port
パラメータを指定することで、指定したポートへポーリングして生死を確認してくれます。
- name: ポート生死の確認 wait_for: port: 80 state: started msg: 'nginx port is dead' timeout: 5
ファイル内文字列の確認
path
パラメータを利用することで、ファイルの存在確認や、ファイル内文字列の存在確認をしてくれます。
- name: server_tokens無効化の確認 wait_for: path: /etc/nginx/nginx.conf search_regex: '^\s*server_tokens\s*off;$' state: present msg: 'server_tokens is not set' timeout: 5
assertモジュール
一般的なassert文と同じような使い方ができます。
コマンド実行結果を確認
以下はサンプル。ngixnのバージョン取得コマンドを実行して、その実行結果より現在のバージョンを判断するテスト内容。
- name: nginxのバージョン取得 command: 'nginx -v' register: nginx_version changed_when: false ignore_errors: true check_mode: no - name: nginxのバージョン確認 assert: that: - "'nginx/1.15.12' in nginx_version.stderr" fail_msg: 'nginx version is not 1.15.12'
failモジュール
fail
モジュールは、 when
の条件に合致した場合に、メッセージを出力するような処理です。
webサイトのページ確認
サンプル。webサイトにアクセスし期待した文字列がない場合に、タスクがfailedとなると同時にメッセージを出力します。
- name: webサイトへのアクセス uri: url: http://localhost/ return_content: yes register: webpage ignore_errors: true check_mode: no - name: webサイトの確認 fail: msg: 'web service is down' when: "'zunchan' not in webpage.content"
参考:テスト用playbookを配置するPath
テスト用playbookは、実際の処理を実行するplaybookと対になるよう配置すると、管理がしやすくなります。
nginx
というロールがあるとして、こんな感じで test.yml
というテスト用playbookファイルを置いてあげます。
.
├── site.yml
└── roles
└── nginx
├── tasks
│ ├── main.yml
│ └── test.yml
site.yml
--- - name: ansible処理 hosts: all become: true tasks: - name: execute nginx role include_role: name: nginx tasks_from: main tags: - nginx - name: execute test for nginx role include_role: name: nginx tasks_from: test tags: - nginx-test
roles/nginx/test.yml
--- - name: nginxロールのユニットテスト block: - name: ポート生死の確認 wait_for: port: 80 msg: 'nginx port is dead' timeout: 5 tags: - nginx-test