Ansible:从命令行覆盖清单的 ansible_host

问题描述 投票:0回答:2

我在

hosts
有一个简单的库存:

dockermachine ansible_host=10.10.10.10

我需要能够从命令行提供我希望的任何其他 IP,覆盖默认值,例如:

ansible-playbook -i [email protected]_host=11.11.11.11 site.yml

我该怎么做?

ansible ansible-inventory
2个回答
5
投票

如果你的清单真的那么简单,你可能不需要主机名就可以生活。从当前默认库存中删除该条目。确保您的 playbook 针对

all
组并使用单个主机 IP 库存启动您的 playbook:

ansible-playbook -i 10.10.10.11, my_playbook.yml

注意:IP 后面的逗号不是错误,它需要存在,以便

-i
参数后面的 IP 被解释为逗号分隔的主机列表,而不是作为清单文件路径。


0
投票

您可以劫持

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_*
是虚构的严重性分层主机组,我在这里使用它来给出一个希望与现实生活相关的示例:如果您在不指定任何主机的情况下运行剧本,则您将仅在业务关键性较低的目标上运行它,但您完全可以选择随时选择其他目标。

© www.soinside.com 2019 - 2024. All rights reserved.