我在
hosts
有一个简单的库存:
dockermachine ansible_host=10.10.10.10
我需要能够从命令行提供我希望的任何其他 IP,覆盖默认值,例如:
ansible-playbook -i [email protected]_host=11.11.11.11 site.yml
我该怎么做?
如果你的清单真的那么简单,你可能不需要主机名就可以生活。从当前默认库存中删除该条目。确保您的 playbook 针对
all
组并使用单个主机 IP 库存启动您的 playbook:
ansible-playbook -i 10.10.10.11, my_playbook.yml
注意:IP 后面的逗号不是错误,它需要存在,以便
-i
参数后面的 IP 被解释为逗号分隔的主机列表,而不是作为清单文件路径。
您可以劫持
ansible_limit
以限制 all
主机,并且仅在未提供时回退到默认主机(组):
hosts: '{{ ansible_limit | default("sev_testing:sev_internal") }}'
现在
ansible-playbook -v playbook.yml -l sev_live:sev_critical
将在 sev_live
和 sev_critical
主机组中的所有主机上运行剧本,尽管这些主机不属于 sev_testing
或 sev_internal
主机组。
但是,仅运行
ansible-playbook -v playbook.yml
仍会在 sev_testing
和 sev_internal
组中的主机上运行剧本。
sev_*
是虚构的严重性分层主机组,我在这里使用它来给出一个希望与现实生活相关的示例:如果您在不指定任何主机的情况下运行剧本,则您将仅在业务关键性较低的目标上运行它,但您完全可以选择随时选择其他目标。