我在Ansible变量(my_var
)中有一个json对象,其中包含类似于以下内容的值:
{
"Enabled": "true"
"SomeOtherVariable": "value"
}
我想在Enabled
中修改my_var
的值并尝试以下操作:
set_fact:
my_var.Enabled: false
和
set_fact:
my_var['Enabled']: false
这两个错误都类似于:
“变量名称'my_var.Enabled'无效。变量必须启动 带字母或下划线字符,仅包含字母, 数字和下划线。“
这可以用set_fact完成,还是有其他方法可以实现这个目的?
答案 0 :(得分:3)
这是我的解决方案 - 可能不是最有说服力的:
- set_fact:
my_temp_enabled_var: '{ "Enabled": "false" }'
- set_fact:
my_temp_enabled_var: "{{ my_temp_enabled_var | from_json }}"
- set_fact:
my_var: "{{ my_var | combine(my_temp_enabled_var) }}"
答案 1 :(得分:1)
您可以使用Jinja2模板创建新词典:
---
- hosts: localhost
gather_facts: no
connection: local
vars:
my_var:
Enabled: true
SomeOtherVariable: value
tasks:
- debug:
var: my_var
- set_fact:
my_var: '{ "Enabled": false, "SomeOtherVariable": "{{ my_var.SomeOtherVariable }}" }'
- debug:
var: my_var
结果:
TASK [debug] *******************************************************************
ok: [localhost] => {
"my_var": {
"Enabled": true,
"SomeOtherVariable": "value"
}
}
TASK [set_fact] ****************************************************************
ok: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"my_var": {
"Enabled": false,
"SomeOtherVariable": "value"
}
}