Ansible:json对象上的set_fact

时间:2017-01-03 01:16:24

标签: python json ansible ansible-2.x

我在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完成,还是有其他方法可以实现这个目的?

2 个答案:

答案 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"
    }
}