Задача Ansible loop с динамической переменной - PullRequest
1 голос
/ 04 апреля 2019

Я бы хотел динамически устанавливать первичные адреса 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

1 Ответ

1 голос
/ 05 апреля 2019

В вашем диапазоне слишком много положительных элементов: индекс 3 не существует

Поскольку вы хотите поддерживать число серверов X, а не фиксировать жестко заданное значение, динамически создавайте диапазон для количества серверов, присутствующих в вашей группе

`range (-1, groups [environment_name + '-ad-server'] | length -1) | список

...