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

ask*_*ing 4 ansible

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

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

- hosts: myhost
  vars:
    - variable1: 15
    - variable2: "15"
    - variable3: "{{ variable2 | int }}"
Run Code Online (Sandbox Code Playgroud)

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

“({{variable3 + 1}})上发生意外的模板类型错误:强制转换为 Unicode:需要字符串或缓冲区,找到 int”

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

  • variable1int
  • variable2ansibleunicode
  • variable3unicode

ansibleunicode当我unicode已经使用| int.
我应该怎么办?

Vij*_*Vat 5

尝试以下操作。

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

  tasks:
  - name: test 
    debug: msg="{{ variable2 | int + 1}}"
    delegate_to: localhost
Run Code Online (Sandbox Code Playgroud)

输出:

TASK [test] ***********************************************************************************************************************
ok: [remote -> localhost] => {
    "msg": "16"
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*tka 5

问:当我已经转换它时,我仍然不明白为什么variable3类型是Unicode而不是整数。

答: Jinja的输出始终是 string。这是一个模板设计器。例如,

    - debug:
        msg: "{{ item }} is {{ item|type_debug }}"
      loop:
        - "{{ var1 }}"
        - "{{ var2 }}"
        - "{{ var1|int }}"
        - "{{ var2|int }}"
      vars:
        var1: 15
        var2: "15"
Run Code Online (Sandbox Code Playgroud)

给出

  msg: 15 is int
  msg: 15 is str
  msg: 15 is str
  msg: 15 is str
Run Code Online (Sandbox Code Playgroud)

仅第一项被识别为整数。第一项中没有表达式,因此 Ansible 不会调用 Jinja 来评估它。相反,Ansible 直接获取变量的值。如果 Jinja 计算表达式,则输出的类型始终为string