是否有可能取代主机:目标与变量?Ansible模板中的主机可以使用变量吗?
- name: ansible application deploy
hosts: {{ vm_ip }}
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
我试图通过vm_ip在命令行中使用--extra-vars="vm_ip: IPP_ADDR "
,但它从来没有工作过。
是否有可能取代主机:目标与变量?Ansible模板中的主机可以使用变量吗?
- name: ansible application deploy
hosts: {{ vm_ip }}
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
我试图通过vm_ip在命令行中使用--extra-vars="vm_ip: IPP_ADDR "
,但它从来没有工作过。
我宁愿只设置hosts:all
,并且只对需要执行的主机执行带有limit
的操作手册。
- name: ansible application deploy
hosts: all
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
使用limit
条款执行剧本:
ansible-playbook app_deploy.yml -l IPP_ADDR
另一个possibilite创造与IP地址的文件。
/tmp/execute_only_that_host
文件内容:
IPP_ADDR
执行:ansible-playbook app_deploy.yml -l @/tmp/execute_only_that_host
我推荐这种方法,因为这是你自己的应用程序,将打电话给你的剧本,你总是可以保证其与limit
呼吁,因此你不需要打扰与hosts
在你的剧本的顶部。
你可以从命令行传递它,是的。
请确保您有有效的YAML:
hosts: "{{ vm_ip }}"
这表达必须引用或你碰到yaml gotcha。
但主机必须首先在库存中定义,我想这是你失踪的一块。这几乎没有意义,因为按照@Bernardo Vale的说法,hosts: all
与--limit
没有什么优势,但是这是更为合理的标准。
我不会使用limit
,如果您忘记错误地指定,那么它会在所有危险的主机上运行。你的命令行是错误的。尝试:
--extra-vars "vm_ip=IP_ADDR"
和
hosts: "{{ vm_ip }}"
我不能想象一个必要。你能解释为什么你需要这个吗?有很多方法可以在主机上不使用变量的情况下执行此操作。 –
我正在开发rails应用程序,它会执行可执行的脚本来自动执行后端中的几件事情,并且脚本需要根据任务对不同的虚拟机运行,您能想出有关如何替换hosts值的任何想法吗?我正在考虑首先运行sed或awk,然后运行脚本,但使用变量将会更清洁 – Deano
为什么不设置hosts:all或设置为包含该应用程序的所有虚拟机的组,并且只需使用-l执行操作手册vm_ip –