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
模块,但我发现它在我需要动态生成事实时很有用。
从另一个变量派生的变量 - 如何得到结果
我正在使用 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
模块,但我发现它在我需要动态生成事实时很有用。