我希望 ansible 在特定组的特定主机上运行剧本。
这是我的库存
[a]
10.10.10.10
11.11.11.11
dog.local.lab
[b]
10.10.10.11
cat.local.lab
moose.local.lab
[c]
10.10.10.12
wolf.local.lab
我想用这个来运行剧本
ansible-playbook -i ./inventory.ini
--limit a:10.10.10.10,a:11.11.11.11,b:10.10.10.11,b:moose.local.lab,c:wolf.local.lab
-e foo=test
-e bar=test2
./mypbook.yaml
但是 ansible 不断返回这些警告:
[WARNING]: Could not match supplied host pattern, ignoring: a:10.10.10.10
[WARNING]: Could not match supplied host pattern, ignoring: a:11.11.11.11
[WARNING]: Could not match supplied host pattern, ignoring: b:10.10.10.11
[WARNING]: Could not match supplied host pattern, ignoring: b:moose.local.lab
[WARNING]: Could not match supplied host pattern, ignoring: c:wolf.local.lab
ERROR! Specified inventory, host pattern and/or --limit leaves us with no hosts to target.
为什么?我是否错误地使用了
--limit
?
问:“我是否错误地使用了 --limit ?”
答:是的。 ansible-playbook 的人说:
-l 'SUBSET', --limit 'SUBSET' 进一步将所选主机限制为其他模式
查看该男子正在谈论的模式。不存在将主机限制为组的模式,例如
a:10.10.10.10
。事实上,创建这样的限制是没有意义的,因为一旦将主机放入此列表中,主机来自哪个组就不再重要了。例如,给定库存
shell> cat inventory.ini
[a]
10.10.10.10
11.11.11.11
dog.local.lab
[b]
10.10.10.11
cat.local.lab
moose.local.lab
[c]
10.10.10.12
wolf.local.lab
剧本
shell> cat mypbook.yml
- hosts: all
tasks:
- debug:
var: ansible_play_hosts_all
run_once: true
按预期工作
shell> ansible-playbook -i inventory.ini --limit 10.10.10.10,11.11.11.11,10.10.10.11,moose.local.lab,wolf.local.lab mypbook.yml
...
ansible_play_hosts_all:
- 10.10.10.10
- 11.11.11.11
- 10.10.10.11
- moose.local.lab
- wolf.local.lab
...