Разрешение динамической переменной Ansible

Переменная производная от другой переменной - как получить результат

Я использую доступную версию 2.7.

У меня есть следующий файл vars v1

envs:
  DEV:
    D1:
      Apps:
       App1:
         App_name: A1
       App2:
         App_name: A2
  SIT:
    S1:
      Apps:
       App1: 
         App_name: K1
       App1: 
         App_name: K2

Я передаю env_type как DEV или SIT и env_name как соответствующий D1 или S1.

моя командная строка

ansible-playbook test.yml -e "env_type='SIT' env_name='S1'"

Я ожидаю, что код вернет все поля App_name для SIT S1 в виде списка для дальнейшей обработки.

Не могли бы вы подсказать, как структурировать код.

Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
0
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать что-то вроде этого:

---
- hosts: local
  connection: local
  gather_facts: no
  vars:
    envs:
      DEV:
        D1:
          Apps:
            App1:
              App_name: A1
            App2:
              App_name: A2
      SIT:
        S1:
          Apps:
            App1:
              App_name: K1
            App2:
              App_name: K2
  tasks:
    - set_fact:
        app_list: '{{ envs[env_type][env_name]["Apps"].values() | map(attribute = "App_name") | list}}'

Используйте метод values объекта Apps, map над ними, чтобы получить атрибут App_name, а затем преобразуйте результат в список.

Вам не нужно использовать модуль set_fact, но я считаю его полезным, когда мне нужно динамически генерировать факты.

Другие вопросы по теме