Моя цель - динамически создать список словарей и использовать его для нужной мне роли.

Мне удалось сгенерировать переменную, но теперь я не могу передать ее роли.

Это моя игра:

- hosts:
   - some-hosts
  tasks:
    - name: create zkh var
      vars:
        zkh: []
      set_fact:
        zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}"
      with_indexed_items: "{{ groups.some-hosts }}"
  roles:
    - {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" }

В задаче я генерирую свою переменную, но затем я не могу передать ее роли, так как (как мне кажется) я не могу получить доступ к области, в которой она определена ("AnsibleUndefinedVariable: ERROR! ERROR! 'zkh' is undefined"}).

Определение переменной уровня игры и задание новой задачи для ее назначения с помощью set_fact и значения zkh не помогают.

Как я могу это исправить?

0
Vincenzo Pii 18 Апр 2016 в 00:19

2 ответа

Лучший ответ

Вы должны использовать pre_tasks для определения переменных, необходимых для роли. pre_tasks - это просто список задач, которые выполняются перед применением роли.

У вас также есть post_tasks, если вам нужно что-то сделать после применения ролей.

1
shaps 21 Апр 2016 в 08:46

Можете ли вы попробовать эту структуру пьесы:

- hosts: 
    - some-hosts
  tasks:
    - name: create zkh var
      vars:
        zkh: []
      set_fact:
        zkh: "{{ zkh + [ {'host': item.1, 'id': item.0} ] }}"
      with_indexed_items: "{{ groups.some-hosts }}"
    - {role: ansible-zookeeper, zookeeper_hosts: "{{ zkh }}" }

Я предполагаю, что ваш set_fact работает правильно.

0
Arbab Nazar 18 Апр 2016 в 17:36