Ansible Башня с динамиками c Проблема с инвентарем: «В задании есть опция с неопределенной переменной» - PullRequest
0 голосов
/ 21 февраля 2020

Я использую AWS EC2 динамический c инвентарь в моей Ansible Башне, и мои экземпляры помечены с их средой. Например:

Ключ: Среда

Значение: NonProd

Это создает группу tag_Environment_NonProd, которая содержит помеченные хосты. Теперь я хочу использовать "set_fact", используя эту группу:

- name: Determine nodes to join in NonProd
  hosts: tag_Group_Elasticsearch
  become: true
  tasks:
  - name: Setting nodes IPs 
    set_fact:
      NonProd_list: "{{ groups['tag_Environment_NonProd'] | map('extract', hostvars, ['ansible_host']) | list }}" 

Я время от времени запускаю экземпляры, отмеченные тегами NonProd, поэтому группа tag_Environment_NonProd не доступна постоянно, и именно поэтому я сталкиваюсь с этой проблемой. .

Я пытался использовать следующие условия, но это не помогло:

когда: tag_Environment_NonProd определено

когда: ('tag_Environment_NonProd' в именах групп)

Я также пытался ignore_error, но, видимо, он также не работает с «неопределенной переменной».

У кого-нибудь есть идеи, как решить эту проблему?

Большое спасибо.

Dragan

1 Ответ

0 голосов
/ 21 февраля 2020

Глобальный подход заключается в том, чтобы всегда иметь значение, когда переменная не определена. Для этого используйте default фильтр .

Следующее установит NonProd_list в пустой список, когда группа не существует (или пуста). Таким образом вы исправите свою текущую ошибку, и вам не нужно будет проверять позже, что установленная переменная существует.

  - name: Setting nodes IPs 
    set_fact:
      NonProd_list: >-
        {{ 
          groups['tag_Environment_NonProd']
          | default([])
          | map('extract', hostvars, ['ansible_host'])
          | list
        }}
...