はじめに
Ansible Towerで実行hostを絞りたい場合がありますよね。
playbookのhostやインベントリで変更することも可能ですが、
Ansible Tower上で編集した方が早くて楽なので実際にやってみましょう。
参考ファイル
(1)インベントリ
参考として、hostを3台分作りました。
グループ「test_group」の中に「test_host1 ~ test_host3」という3台のhostがいます。
[test_group]
test_host1
test_host2
test_host3
(2)playbook(test_limit.yml)
設定方法は後述しますが、Ansible Towerで制限を設定すると「ansible_limit(マジック変数)」
に格納されます。
hostsに「test_group」と入力されているので、デフォルトでは3台に実行します。
---
- hosts: test_group
gather_facts: false
tasks:
- name: "test debug"
debug:
var: ansible_limit
パターン1:複数のホスト(test_host1/test_host2)を入力
ここからは制限への入力を色々と試していきます。
Ansible Towerでは、テンプレートの設定に以下のような制限欄があるので入力します。
複数のホストに実行する場合は、カンマで区切る必要があります。
テンプレートの実行画面では、以下のように制限が入力されていることが確認できます。
指定されていないホスト(test_host3)は、実行結果にさえ出てこなくなります。
PLAY [test_group] **************************************************************
TASK [test debug] **************************************************************
ok: [test_host2] => {
"ansible_limit": "test_host1,test_host2"
}
ok: [test_host1] => {
"ansible_limit": "test_host1,test_host2"
}
PLAY RECAP *********************************************************************
test_host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test_host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
パターン2:グループ名(test_group)を入力
実行結果では3台に対してplaybookが実行され、ansible_limitに変数が
格納されていることが確認できます。
PLAY [test_group] **************************************************************
TASK [test debug] **************************************************************
ok: [test_host2] => {
"ansible_limit": "test_group"
}
ok: [test_host3] => {
"ansible_limit": "test_group"
}
ok: [test_host1] => {
"ansible_limit": "test_group"
}
PLAY RECAP *********************************************************************
test_host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test_host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test_host3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
パターン3:存在しないホスト名(test_host4)を入力
存在しないホスト名(test_host4)を入力してみると、そのようなホストはいない
ということでエラーになりました。
[WARNING]: Could not match supplied host pattern, ignoring: test_host4
ERROR! Specified hosts and/or --limit does not match any hosts
パターン4:何も入力しない
制限に何も入力しないと、そもそも**「ansible_limit」という変数自体が存在しなくなります**。
空の文字列になるわけでないので注意が必要です
PLAY [test_group] **************************************************************
TASK [test debug] **************************************************************
ok: [test_host2] => {
"ansible_limit": "VARIABLE IS NOT DEFINED!"
}
ok: [test_host1] => {
"ansible_limit": "VARIABLE IS NOT DEFINED!"
}
ok: [test_host3] => {
"ansible_limit": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *********************************************************************
test_host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test_host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
test_host3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
まとめ
Ansible Towerの制限機能は実行グループやホストを簡単に変更できるので便利ですね。