Настройка условий доступа к разным переменным для разных хостов

#ansible #jinja2

#ansible #jinja2

Вопрос:

В моем файле / ansible / hosts в настоящее время настроены два хоста. Тем не менее, я хочу, чтобы эти два хоста имели две разные переменные, но использовали один и тот же шаблон jinja2 для доступа к нему. Как я могу применить условный оператор?

My ./var/main.yaml выглядит следующим образом:

 ---
- name: Variables for R1
  when: "{{ ansible_host }}" == '198.51.100.4'
  routers_all:
    - {OSPF: 'Yes', OSPF_area: '0', OSPF_id: '1', hostname: R1}
  int_details_R1:
    - {int: Loopback1, ip: 10.0.0.1, mask: 255.255.255.255}
    - {int: FastEthernet0/0, ip: 198.51.100.3, mask: 255.255.255.0}
    - {int: FastEthernet1/0, ip: 198.51.101.3, mask: 255.255.255.0}
    - {int: FastEthernet2/0, ip: 198.51.102.3, mask: 255.255.255.0}

- name: Variables for R2
  when: "{{ ansible_host }}" == '198.51.100.5'
  routers_all:
    - {OSPF: 'Yes', OSPF_area: '0', OSPF_id: '2', hostname: R2}
  int_details_R2:
    - {int: Loopback1, ip: 20.0.0.1, mask: 255.255.255.255}
    - {int: FastEthernet0/0, ip: 198.51.100.4, mask: 255.255.255.0}
    - {int: FastEthernet1/0, ip: 198.51.101.4, mask: 255.255.255.0}
  

Структура файла-

 automation@automation:~/lab8/ANSIBLE/RTR-TEMPLATE$ tree
.
├── ospf.yaml
└── roles
    └── router
        ├── tasks
        │   └── main.yaml
        ├── templates
        │   └── router.j2
        └── vars
            └── main.yaml
  

Комментарии:

1. Я не могу дать вам точную реализацию jinja, но вы можете использовать gist.github.com/halberom/794c06598f40ccc31560 в качестве ссылки.

Ответ №1:

Используйте host_vars. Создайте каталог ~/lab8/ANSIBLE/RTR-TEMPLATE/host_vars и создайте файлы с переменными, специфичными для хоста.

~/lab8/ANSIBLE/RTR-TEMPLATE/host_vars/198.51.100.4

 routers_all:
  - {OSPF: 'Yes', OSPF_area: '0', OSPF_id: '1', hostname: R1}
int_details_R1:
  - {int: Loopback1, ip: 10.0.0.1, mask: 255.255.255.255}
  - {int: FastEthernet0/0, ip: 198.51.100.3, mask: 255.255.255.0}
  - {int: FastEthernet1/0, ip: 198.51.101.3, mask: 255.255.255.0}
  - {int: FastEthernet2/0, ip: 198.51.102.3, mask: 255.255.255.0}
  

~/lab8/ANSIBLE/RTR-TEMPLATE/host_vars/198.51.100.5

 routers_all:
  - {OSPF: 'Yes', OSPF_area: '0', OSPF_id: '2', hostname: R2}
int_details_R2:
  - {int: Loopback1, ip: 20.0.0.1, mask: 255.255.255.255}
  - {int: FastEthernet0/0, ip: 198.51.100.4, mask: 255.255.255.0}
  - {int: FastEthernet1/0, ip: 198.51.101.4, mask: 255.255.255.0}
  

Эти переменные будут добавлены «плагином vars по умолчанию», как описано в Приоритет переменных: куда мне поместить переменную?