有谁知道如何在set_fact模块中对整数变量进行算术赋值?目前,我设法通过使用 Jinja2 模板使用 String 变量来做到这一点,如下所示:
- set_fact:
flagStr: "0"
- name: Add by one one one
set_fact:
flagStr: "{{flagStr|int + 1 + 1 + 1}}"
- name: debug total
debug:
msg:
- "{{flagStr}}"
结果将返回 3 作为预期输出。但是,我不知道如何对整数变量执行此操作,因为以相同的方式执行此操作会返回错误。
我试过像这样:
- set_fact:
flagInt: 0
- name: Add by one
set_fact:
flagInt: flagStr + 1 #will return as 'flagInt + 1'
flagInt: {{flagInt}} + 1 #will return as syntax error
flagInt: "{{flagInt}}" + 1 #will return as syntax error
flagInt: "{{flagInt}} + 1" #will return as '0 + 1'
- name: debug total
debug:
msg:
- "{{flagInt}}"
Q: “我不知道如何对整数变量执行此操作,因为以同样的方式执行它会返回错误。”
答:你没有这样做。与第一个示例相比,第二个示例中的所有四个选项都不同。事实上,在第一个示例中使用字符串和整数时都会给出相同的结果。
有必要评估表达式“{{ }}”。如果变量flagStr是一个整数flagStr: 0
没有必要将其转换为整数。它也不疼。下面的任务按预期工作。
- set_fact:
flagStr: 0
- set_fact:
flagStr: "{{ flagStr + 1 + 1 + 1 }}"
- debug:
var: flagStr
Notes
- 了解这一点很有用
flagStr: 0
是一个整数,但是flagStr: "{{ flagStr + 1 + 1 + 1 }}"
是一个字符串
- set_fact:
flagStr: 0
- debug:
var: flagStr|type_debug
- set_fact:
flagStr: "{{ flagStr + 1 + 1 + 1 }}"
- debug:
var: flagStr
- debug:
var: flagStr|type_debug
gives
TASK [set_fact] ****************************************************
ok: [localhost]
TASK [debug] *******************************************************
ok: [localhost] =>
flagStr|type_debug: int
TASK [set_fact] ****************************************************
ok: [localhost]
TASK [debug] *******************************************************
ok: [localhost] =>
flagStr: '3'
TASK [debug] *******************************************************
ok: [localhost] =>
flagStr|type_debug: str
- 如果要重复操作,需要将字符串转换为整数
- set_fact:
flagStr: "{{ flagStr|int + 1 + 1 + 1 }}"
否则任务会失败
msg: ' ({{ flagStr + 1 + 1 + 1 }}) 上发生意外的模板类型错误:只能将 str (不是“int”)连接到 str'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)