3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ansible Tower】制限で実行hostを絞りたい

Last updated at Posted at 2021-01-18

はじめに

 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台に実行します。

test_limit.yml
---
- hosts: test_group
  gather_facts: false
  tasks:
    - name: "test debug"
      debug:
        var: ansible_limit

パターン1:複数のホスト(test_host1/test_host2)を入力

 ここからは制限への入力を色々と試していきます。
Ansible Towerでは、テンプレートの設定に以下のような制限欄があるので入力します。
複数のホストに実行する場合は、カンマで区切る必要があります。

template.PNG

テンプレートの実行画面では、以下のように制限が入力されていることが確認できます。

tower_gui.PNG

指定されていないホスト(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の制限機能は実行グループやホストを簡単に変更できるので便利ですね。

参考記事

特別な変数 — Ansible Documentation

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?