是否可以替换host:target with variable?
- name: ansible application deploy
hosts: {{ vm_ip }}
vars:
project_path: "{{ host_project_path|default('/var/www/html') }}"
我尝试在命令行上使用--extra-vars="vm_ip: IPP_ADDR "
传递vm_ip,但它从未起作用。
答案 0 :(得分:2)
我宁愿只设置hosts:all
并使用limit
执行playbook,只执行您需要执行的主机。
- 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
另一个可能性是创建一个带有ip地址的文件。
/tmp/execute_only_that_host
文件内容:
IPP_ADDR
执行:ansible-playbook app_deploy.yml -l @/tmp/execute_only_that_host
我建议使用这种方法,因为它是您自己的应用程序,可以调用您的剧本,您可以随时通过limit
确保调用它,因此您不需要为{{1}打扰在你的剧本的顶部。
答案 1 :(得分:1)
我不会使用limit
,如果您忘记错误地指定它,那么它将在所有危险的主机上运行。你的命令行是错误的。尝试:
--extra-vars "vm_ip=IP_ADDR"
和
hosts: "{{ vm_ip }}"
答案 2 :(得分:0)
您可以从命令行传递它,是的。
确保你有有效的yaml:
hosts: "{{ vm_ip }}"
必须引用该表达式,否则您会遇到yaml gotcha。
但首先必须在清单中定义主机,我想这是你错过的部分。这几乎使它变得毫无意义,因为与@Bernardo Vale所描述的使用hosts: all
和--limit
没有任何优势 - 但这是更加安全的标准。