字符串不会在 Ansible Playbook 中转换为整数

String does not convert to integer in Ansible Playbook

抱歉,如果之前有人问过这个问题,但我找不到任何符合我的问题的解决方案。

我正在尝试将必须转换的字符串转换为整数:

- hosts: myhost
  vars:
    - variable1: 15
    - variable2: "15"
    - variable3: "{{ variable2 | int }}"

我尝试使用variable2(string)进行计算,所以我在variable3中将其转换为int。但失败并显示错误消息

"Unexpected templating type error occurred on ({{ variable3 + 1 }}): coercing to Unicode: need string or buffer, int found"

因此,我尝试使用 type_debug 找出列出的 3 个变量的每种类型。

我不明白 ansibleunicodeunicode 之间的区别,或者当我已经使用 | int 将它从字符串转换为整数时,为什么它被列为 unicode 而不是整数。
我该怎么办?

试试下面的方法。

- hosts: myhost
  vars:
    - variable1: 15
    - variable2: "15"

  tasks:
  - name: test 
    debug: msg="{{ variable2 | int + 1}}"
    delegate_to: localhost

输出:

TASK [test] ***********************************************************************************************************************
ok: [remote -> localhost] => {
    "msg": "16"
}

问:"我还是不明白为什么我已经转换了variable3类型是Unicode而不是整数。"

A:Jinja 的输出总是 string。这是一个模板设计器。例如,

    - debug:
        msg: "{{ item }} is {{ item|type_debug }}"
      loop:
        - "{{ var1 }}"
        - "{{ var2 }}"
        - "{{ var1|int }}"
        - "{{ var2|int }}"
      vars:
        var1: 15
        var2: "15"

给予

  msg: 15 is int
  msg: 15 is str
  msg: 15 is str
  msg: 15 is str

只有第一项被识别为整数。第一项中没有表达式,因此 Ansible 不会调用 Jinja 对其求值。相反,Ansible 直接获取变量的值。如果表达式由 Jinja 求值,输出的类型总是 string.