我有两个主机-198.51.100.2和198.51.100.3,它们都在/ ansible / hosts文件中的同一组下配置。现在,我希望这两台主机使用两个不同的var文件,即100.2以使用main_R1.yaml和另一个路由器的其他var文件。有可能吗?
我的文件结构-
automation@automation:~/lab8/ANSIBLE/RTR-TEMPLATE$ tree
.
├── ospf.yaml
└── roles
└── router
├── tasks
│ └── main.yaml
├── templates
│ └── router.j2
└── vars
└── main_R1.yaml
└── main_R2.yaml
答案 0 :(得分:0)
一个选择是有条件地 include_vars 。 (仅自动加载vars / main.yml。)
将任务/vars.yml作为第一个任务导入任务/main.yml
- import_tasks: vars.yml
并创建task / vars.yml
- include_vars: main_R1.yaml
when: ansible_hostname == "198.51.100.2"
- include_vars: main_R2.yaml
when: ansible_hostname == "198.51.100.3"
更灵活的选择是映射此类主机和文件
my_host_vars:
- {host: "198.51.100.2", vars: "main_R2.yaml"}
- {host: "198.51.100.3", vars: "main_R3.yaml"}
和 include_vars 在task / vars.yml
中循环- include_vars: "{{ item.vars }}"
loop: "{{ my_host_vars }}"
when: item.host == ansible_hostname
如果您可以重命名和移动var文件,则“ {在Ansible中的首选做法是” Splitting Out Host and Group Specific Data。有必要了解相当复杂的Variable precedence: Where should I put a variable?。