不带引号的 Ansible 变量

raw*_*raw 3 ansible

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

我有

ok: [device] => {
    "fact": {
        "int": "7"
    },
}
Run Code Online (Sandbox Code Playgroud)

我想

ok: [device] => {
    "fact": {
        "int": 7
    },
}
Run Code Online (Sandbox Code Playgroud)

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

有办法吗?

Vla*_*tka 7

Jinja表达式的结果始终是一个字符串。你无法得到一个整数。我猜你真正想要的是字典fact中属性int的值是一个整数。测试当前值,例如

        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug
Run Code Online (Sandbox Code Playgroud)

如果属性int的值是一个字符串,您将得到(缩写)

  fact.int: '7'
  fact.int|type_debug: AnsibleUnicode
Run Code Online (Sandbox Code Playgroud)

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

        - set_fact:
            fact: "{{ fact|combine({'int': _int|int}) }}"
          vars:
            _int: "{{ fact.int }}"
        - debug:
            var: fact.int
        - debug:
            var: fact.int|type_debug
Run Code Online (Sandbox Code Playgroud)

你会得到(精简)

  fact.int: '7'
  fact.int|type_debug: int
Run Code Online (Sandbox Code Playgroud)

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


笔记

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