Ansible 动态变量解析

Ansible dynamic variable resolution

从另一个变量派生的变量 - 如何得到结果

我正在使用 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'"

我希望代码将 return SIT S1 的所有 App_name 字段作为列表,以供进一步处理。

能否请您建议如何构建代码。

你可以这样做:

---
- 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}}'

使用Apps对象的values方法,map在它们上面获取属性App_name,然后将结果转换为列表。

您不需要使用 set_fact 模块,但我发现它在我需要动态生成事实时很有用。