不带引号的 Ansible 变量

不带引号的 Ansible 变量

要使用从 json 收集的变量,我需要它是原始的,不带引号:

我有

ok: [device] => {
    "fact": {
        "int": "7"
    },
}

我想

ok: [device] => {
    "fact": {
        "int": 7
    },
}

问题是引号不是变量的一部分,所以我不能使用| int| replace删除引号。

有办法吗?

答案1

结果是金贾表达式始终是字符串。您无法获得整数。我猜您真正想要的是属性的值整数在字典里事实为整数。测试当前值,例如

        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug

如果属性的值整数您将获得一个字符串(节选)

  fact.int: '7'
  fact.int|type_debug: AnsibleUnicode

您可以将字符串转换为整数,例如

        - set_fact:
            fact: "{{ fact|combine({'int': _int|int}) }}"
          vars:
            _int: "{{ fact.int }}"
        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug

你会得到(节选)

  fact.int: '7'
  fact.int|type_debug: int

现在,属性的值整数是一个整数。但是,Jinja 表达式的结果var: fact.int仍然是一个字符串fact.int: '7'


笔记

  • 请注意变量选项调试模块已经在 J​​inja2 上下文中运行,并且具有隐式的 {{ }} 包装。

相关内容