Я бы хотел динамически устанавливать первичные адреса DNS на хостах с помощью Ansible.
Нижняя группа хостов должна быть расширена с помощью хостов X и должна продолжать этот «цикл входа dns» (см. Список внизу).
В моем инвентаре Ansible есть следующие Серверы:
[yst-ad-server]
server1
server2
server3
Я хочу установить записи DNS для этих серверов следующим образом:
Server: Primary DNS:
server1 --> server3
server2 --> server1
server3 --> server2
Без циклов моя задача работает и выглядит так:
- name: Select all AD Servers (but the first in group) and set their DNS server to the first server in group (usually the master)
win_dns_client:
adapter_names: '*'
ipv4_addresses: "{{ hostvars[groups[environment_name + '-ad-server'][-1]].ansible_host }}"
when: inventory_hostname == groups[environment_name + '-ad-server'][0]
(Environment_Name - это переменная, которую я установил при запуске playbook. В этом случае я бы использовал «-e environemnt_name = yst» для соответствия с группой инвентаря, упомянутой выше.)
Эта часть получает IP-адрес server3 (последний в группе, поэтому я использую -1) и устанавливает его на первом хосте (0) в группе, который является server1, когда совпадает имя хоста текущего хоста.
После некоторых исследований и тестов я сейчас нахожусь в этой точке:
- name: name
win_dns_client:
adapter_names: '*'
ipv4_addresses: "{{ hostvars[groups[environment_name + '-ad-server'][item]].ansible_host }}"
when: inventory_hostname == groups[environment_name + '-ad-server'][item + 1]
loop: "{{ range(-1, 3)|list }}"
К сожалению, это не работает.
Я получаю ошибку:
The conditional check 'inventory_hostname == groups[environment_name + '-ad-server'][item + 1]' failed. The error was: error while evaluating conditional (inventory_hostname == groups[environment_name + '-ad-server'][item + 1]): list object has no element