字符串不会在 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 个变量的每种类型。
variable1
是 int
variable2
是 ansibleunicode
variable3
是 unicode
我不明白 ansibleunicode
和 unicode
之间的区别,或者当我已经使用 | 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.
抱歉,如果之前有人问过这个问题,但我找不到任何符合我的问题的解决方案。
我正在尝试将必须转换的字符串转换为整数:
- 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 个变量的每种类型。
variable1
是int
variable2
是ansibleunicode
variable3
是unicode
我不明白 ansibleunicode
和 unicode
之间的区别,或者当我已经使用 | 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.