Ansible 的字典键中是否允许使用特殊字符(破折号、点、分号……)?

Kri*_*ien 8 ansible

我对剧本有疑问,想知道问题是否是我使用的字典中的某些关键名称具有特殊字符,即其中的破折号。Ansible 不清楚这是否允许。

任务:

- debug:
    var: block_storage_route

- debug:
    var: block_storage_route[0].table-id
  vars:
    block_storage_route:
      - "table-id": 0
Run Code Online (Sandbox Code Playgroud)

输出:

TASK [debug] ******************************************************
ok: [example.com] => {
    "block_storage_route": [
        {
            "table-id": 0
        }
    ]
}

TASK [debug] ******************************************************
ok: [example.com] => {
    "block_storage_route[0].table-id": "VARIABLE IS NOT DEFINED!"
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,尽管键存在于变量中,但我收到“变量未定义”错误。 这是为什么?table-iddebugblock_storage_route

Vla*_*tka 10

问:Ansible 中的字典键中允许使用特殊字符吗?

答:是的。他们是。事实上,YAML 中对键没有任何限制。引用自Mapping(又名 Python 字典)

“映射节点的内容是一组无序的键:值节点对,每个键都是唯一的。YAML 对节点没有进一步的限制。特别是,键可以是任意节点,... ”

当键的名称不符合 Ansible创建有效的变量名称时,使用方括号表示法而不是点表示法

    - debug:
        var: block_storage_route[0]['table-id']
Run Code Online (Sandbox Code Playgroud)