读取名称中带有“(”的ansible变量

Reading an ansible variable with "(" in its name

A​​nsible 变量文件 var.yml:

---
OS: test123
OStype(gb): test
disk size(gb): test

main.yml

---
- name: read varibale-
  hosts: localhost
  gather_facts: no
  tasks:
  - include_vars: var.yml
  - debug:
      msg: "{{ OStype(gb) }}"

错误:

"msg": "The task includes an option with an undefined variable. The error was: 'OStype' is undefined\n\

对于变量名包含特殊字符的情况,可以使用vars lookup.

鉴于剧本:

- hosts: all
  gather_facts: no
      
  tasks:
    - include_vars: vars.yml
    - debug:
        msg: "{{ lookup('vars', 'OStype(gb)') }}"

和文件vars.yml:

OS: test123
OStype(gb): test
disk size(gb): test

这产生:

PLAY [all] *******************************************************************************************************

TASK [include_vars] **********************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************
ok: [localhost] => {
    "msg": "test"
}

PLAY RECAP *******************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

将包含的变量放入字典中。例如

    - include_vars:
        file: var.yml
        name: os_dict
    - debug:
        var: os_dict
    - debug:
        var: os_dict['disk size(gb)']

给予

    "os_dict": {
        "OS": "test123",
        "OStype(gb)": "test",
        "disk size(gb)": "test"
    }
}

    "os_dict['disk size(gb)']": "test"
}