Переменная производная от другой переменной - как получить результат
Я использую доступную версию 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 в виде списка для дальнейшей обработки.
Не могли бы вы подсказать, как структурировать код.

Вы можете сделать что-то вроде этого:
---
- 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, но я считаю его полезным, когда мне нужно динамически генерировать факты.