如何将host_group中的某些主机定向到不同的var文件?

时间:2019-03-31 01:01:19

标签: ansible jinja2

我有两个主机-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

1 个答案:

答案 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?