从命令行覆盖Ansible playbook的主机variables

这是我正在使用的剧本的一个片段( server.yml ):

 - name: Determine Remote User hosts: web gather_facts: false roles: - { role: remote-user, tags: [remote-user, always] } 

我的主机文件有不同的服务器组,例如

 [web] xxxx [droplets] xxxx 

现在我想执行ansible-playbook -i hosts/<env> server.yml并从server.yml覆盖hosts: web来运行[droplets]这个剧本。

我可以直接重写一次,不直接编辑server.yml吗?

谢谢。

我不认为Ansible提供这个function,它应该。 这是你可以做的事情:

hosts: "{{ variable_host | default('web') }}"

你可以从命令行或variables文件中传递variable_host ,例如:

 ansible-playbook server.yml --extra-vars "variable_host=newtarget(s)" 

对于任何人可能会来寻找解决scheme。
玩书

 - hosts: '{{ host }}' tasks: - debug: msg="Host is {{ ansible_fqdn }}" 

库存

 [web] xxxx [droplets] xxxx 

命令: ansible-playbook deplyment.yml -i hosts --extra-vars "host=droplets"所以你可以在extra-vars中指定组名

如果要运行与主机关联的任务,但要在不同的主机上运行,​​则应尝试使用delegate_to 。

在你的情况下,你应该委托给你的本地主机(ansible master)并且调用ansible-playbook命令

这有点晚,但我认为你可以使用--limit or -l命令将模式限制在更具体的主机上。 (版本2.3.2.0)

你可以有- hosts: all (or group) tasks: - some_task

然后运行ansible-playbook playbook.yml -l some_more_strict_host_or_pattern并使用--list-hosts标志来查看在哪个主机上应用此configuration。