【问题标题】:Define a dictionary as string将字典定义为字符串
【发布时间】:2022-01-04 22:52:57
【问题描述】:

我想像这样在 Ansible 中运行一个任务:

- name: Task
  set_fact:
    var: >-
      {"system": [{
      "key1": "value1",
      "key2": "value2"}]}

变量 var 被 Ansible 视为一个字典,但我希望它是一个字符串,以便在配置文件中对其进行模板化。有什么建议吗?

谢谢。

【问题讨论】:

  • 是什么让你认为它变成了 dict ?请edit您的问题与您所采取的调试步骤以及该结论背后的原因。

标签: ansible


【解决方案1】:

你错了。变量的值不是字典。这是一个字符串。例如

    - set_fact:
        _var: >-
          {"system": [{
           "key1": "value1",
           "key2": "value2"}]}
    - debug:
        var: _var
    - debug:
        var: _var|type_debug
    - debug:
        var: _var.system.0.key1

可以看到类型是AnsibleUnicode,字典中的路径是未定义的

  _var:
    system:
    - key1: value1
      key2: value2

  _var|type_debug: AnsibleUnicode

  _var.system.0.key1: VARIABLE IS NOT DEFINED!

您可以将字符串转换为字典

    - debug:
        var: _var|from_yaml
    - debug:
        var: _var|from_yaml|type_debug
    - debug:
        var: (_var|from_yaml).system.0.key1

可以看到类型是dict,并且定义了字典中的路径

  _var|from_yaml:
    system:
    - key1: value1
      key2: value2

  _var|from_yaml|type_debug: dict

  (_var|from_yaml).system.0.key1: value1

【讨论】:

  • 实际上,我做了这个,它变成了一个 dic。 ``` - name: Task set_fact: var: >- {"system": [{ "key1": "{{ templa1 }}", "key2": "{{ template2 }}"}]} ``` 谢谢
  • 我不确定这是不是a feature or a bug
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2023-03-11
  • 2021-08-21
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多