我使用环境变量在 Ansible 中设置了一个事实 query('env', 'VARIABLE')
我VARIABLE是多行字符串(YAML 格式):
device: eth0
bootproto: static
address: 192.168.x.x
netmask: 255.255.255.0
gateway: 192.168.x.x
Run Code Online (Sandbox Code Playgroud)
当我VARIABLE用 Ansible打印时,我把它作为一个带有\n行间的字符串
"msg": ["device: eth0\nbootproto: static\naddress:
192.168.x.x\nnetmask: 255.255.255.0\ngateway: 192.168.x.x"]
Run Code Online (Sandbox Code Playgroud)
有没有方便的方法将其转换为dict?我需要稍后在我的任务中使用它,在配置机器的 NIC 时加载参数。
我尝试使用 Jinja2 过滤器但- debug: msg="{{ network_settings | from_yaml }}"没有成功。
lookup和之间的区别query主要在于query总是返回一个列表。
所以:
要么替换query('env', 'VARIABLE')为lookup('env', 'VARIABLE'):
- debug:
msg: "{{ lookup('env', 'VARIABLE') | from_yaml }}"
Run Code Online (Sandbox Code Playgroud)或相应地处理列表(内容将在第一个也是唯一的元素中):
- debug:
msg: "{{ query('env', 'VARIABLE') | first | from_yaml }}"
Run Code Online (Sandbox Code Playgroud)