我想通过【Ansible Tower】的限制来缩小执行主机范围
首先
有时候我们可能想要在Ansible Tower中限定执行的主机。
虽然可以通过更改playbook的主机或清单来实现,但是在Ansible Tower上进行编辑更快且更方便,所以让我们实际尝试一下。
参考文件
(1)库存清单
作为参考,我创建了3台主机。
在“test_group”组中,有3台主机,“test_host1 ~ test_host3”。
[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
请在多个主机(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
选项1:输入测试组名称(test_group)。
在执行结果中,可以看到playbook针对3台主机进行了执行,并且确认了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
选项一:输入一个不存在的主机名(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
选项1:无需输入任何内容
如果不对限制进行任何输入,那么实际上变量”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文档