簡體   English   中英

Ansible:json對象上的set_fact

[英]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

兩者都給出類似於以下內容的錯誤:

“變量名'my_var.Enabled'無效。變量必須以字母或下划線字符開頭,並且只能包含字母,數字和下划線。”

可以使用set_fact完成此操作,還是有其他方法可以實現此目的?

這是我的解決方案-可能不是最雄辯的:

- 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) }}"

您可以使用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"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM