我使用Ansible对一小群计算机执行一些简单的用户管理任务。目前,我把我的剧本设置为hosts: all和我的hosts文件只是一个单独的组,列出了所有的机器:
# file: hosts
[office]
imac-1.local
imac-2.local
imac-3.local
我发现自己经常不得不以一台机器为目标。ansible-playbook命令可以这样限制播放:
ansible-playbook --limit imac-2.local user.yml
但这似乎有点脆弱,尤其是对于一个潜在的破坏性剧本来说。省略限制标志意味着剧本将在任何地方运行。因为这些工具只是偶尔被使用,所以似乎有必要采取措施进行万无一失的回放,这样我们就不会在几个月后意外地破坏一些东西。
是否有将剧本运行限制在一台机器上的最佳实践?理想情况下,如果遗漏了一些重要的细节,剧本应该是无害的。
为了扩展joemailer的回答,如果你想拥有模式匹配能力来匹配远程机器的任何子集(就像ansible命令所做的那样),但仍然想让它非常难以意外地在所有机器上运行playbook,这是我提出的:
和另一个答案一样:
# file: user.yml (playbook)
---
- hosts: '{{ target }}'
user: ...
有请以下主持人:
imac-10.local
imac-11.local
imac-22.local
现在,要在所有设备上运行该命令,必须显式地将目标变量设置为“all”
ansible-playbook user.yml --extra-vars "target=all"
要将其限制为特定的模式,可以设置target=pattern_here
或者,你可以保留target=all,并附加——limit参数,例如:
--limit imac-1*
ie。
ansible-playbook用户。Yml——extra-vars "target=all"——limit imac-1*——list-hosts
结果是:
playbook: user.yml
play #1 (office): host count=2
imac-10.local
imac-11.local