【问题标题】:Ansible dynamic variable resolutionAnsible 动态可变分辨率
【发布时间】:2019-11-26 15:46:50
【问题描述】:

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

我使用的是 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'"

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

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

【问题讨论】:

    标签: variables dynamic ansible resolution


    【解决方案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}}'
    

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      相关资源
      最近更新 更多