我可以在 Ansible 模板中为主机使用变量吗?
Can I use variable for hosts in Ansible template?
是否可以用变量替换 hosts: target?
- 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,但从未成功。
我宁愿只设置 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
另一种可能性是使用 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 }}"
是否可以用变量替换 hosts: target?
- 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,但从未成功。
我宁愿只设置 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
另一种可能性是使用 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 }}"