从命令行覆盖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。