无需命令行即可覆盖 Ansible playbook 的主机变量

无需命令行即可覆盖 Ansible playbook 的主机变量

有 2 个主机 my_host1、my_host2 此代码适用于 my_host1,我还需要为 my_host2 运行它是否可以在 ansible main.yml 任务中覆盖主机值,而无需更改 init playbook.yml 中的字符串“hosts:my_host1”?命令行 --extra-vars 对我来说不是解决方案。

谢谢

---

#init playbook.yml
- name: run role test
  hosts: my_host1
  roles:
   - role: test_1

---

#main.yml in role test_1

   - name: Run tasks from example.yml
     block:
       - include_tasks: example.yml


---
# example.yml

   - debug:
       msg: "This is example task"

答案1

--extra-vars无论如何都不起作用,因为 hosts 定义不是一个变量。

通常,如果剧本中没有明确定义,您可以通过参数添加想要运行剧本的主机--limit

# playbook.yml
- name: run role test
  hosts: all

然后执行:

ansible-playbook playbook.yaml --limit my_host1,myhost2

或者你提供一个在清单中定义的组

[my_hosts]
my_host1
my_host2

称呼:

ansible-playbook playbook.yaml --limit my_hosts

答案2

您应该简单地编写一个带有 [计算机] 块的库存文件,然后设置您的主机:计算机。

您的剧本将应用于您库存中的每个主机。这是 Ansible 用途的基础。

https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html

相关内容