Ansible:set_fact 在 json 对象上
Ansible: set_fact on a json object
我在 Ansible 变量 (my_var
) 中有一个 json 对象,它包含类似于以下内容的值:
{
"Enabled": "true"
"SomeOtherVariable": "value"
}
我想修改 my_var
中 Enabled
的值并尝试了以下操作:
set_fact:
my_var.Enabled: false
和
set_fact:
my_var['Enabled']: false
两者都会给出类似于以下的错误:
"The variable name 'my_var.Enabled' is not valid. Variables must start
with a letter or underscore character, and contain only letters,
numbers and underscores."
这可以用 set_fact 完成还是有其他方法可以实现?
您可以使用 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"
}
}
这是我的解决方案 - 可能不是最多 eloquent:
- 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) }}"
我在 Ansible 变量 (my_var
) 中有一个 json 对象,它包含类似于以下内容的值:
{
"Enabled": "true"
"SomeOtherVariable": "value"
}
我想修改 my_var
中 Enabled
的值并尝试了以下操作:
set_fact:
my_var.Enabled: false
和
set_fact:
my_var['Enabled']: false
两者都会给出类似于以下的错误:
"The variable name 'my_var.Enabled' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores."
这可以用 set_fact 完成还是有其他方法可以实现?
您可以使用 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"
}
}
这是我的解决方案 - 可能不是最多 eloquent:
- 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) }}"