Ansible:如何在set_事实模块中对整型变量进行运算?
有人知道如何在set_事实模块中对整数变量进行算术赋值吗?目前,我使用字符串变量和Jinja2模板实现了这一点,如下所示:Ansible:如何在set_事实模块中对整型变量进行运算?,ansible,int,integer-arithmetic,Ansible,Int,Integer Arithmetic,有人知道如何在set_事实模块中对整数变量进行算术赋值吗?目前,我使用字符串变量和Jinja2模板实现了这一点,如下所示: - set_fact: flagStr: "0" - name: Add by one one one set_fact: flagStr: "{{flagStr|int + 1 + 1 + 1}}" - name: debug total debug: msg:
- set_fact:
flagStr: "0"
- name: Add by one one one
set_fact:
flagStr: "{{flagStr|int + 1 + 1 + 1}}"
- name: debug total
debug:
msg:
- "{{flagStr}}"
- 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}}"
结果将返回3作为预期输出。但是,我不知道如何对整型变量执行此操作,因为以相同的方式执行此操作时,它将返回一个错误
我试过这样做:
- set_fact:
flagStr: "0"
- name: Add by one one one
set_fact:
flagStr: "{{flagStr|int + 1 + 1 + 1}}"
- name: debug total
debug:
msg:
- "{{flagStr}}"
- 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}}"
问:“我不知道如何处理整数变量,因为用同样的方法处理时会返回错误。”
A:你不是用同样的方法做的。第二个示例中的所有四个选项与第一个不同。事实上,在第一个示例中使用string和integer时得到的结果是相同的
有必要计算表达式“{}}”。如果变量flagStr是整数flagStr:0
,则无需将其转换为整数。也不痛。下面的任务按预期工作
- set_fact:
flagStr: 0
- set_fact:
flagStr: "{{ flagStr + 1 + 1 + 1 }}"
- debug:
var: flagStr
使用与以前工作的
flagInt:{{flagInt | int+1}}}完全相同的语法如何
?现在,如果您有156.4%的把握,这将始终是一个int(我永远不会假设在yaml中,尤其是ansible中……),那么您最终可以删除cast part=>flagInt:“{{flagInt+1}}”
。但是,如果它意外地变成一个字符串(例如,您在命令行上传递额外变量的值…)则会断开。是的,您是正确的,先生。我从来没有想过尝试,因为它已经是整数了。我想我用了错误的词来形容我尝试了与str相同的方法。谢谢!谢谢你,先生。所以我误解了它不能以同样的方式应用于int变量。就像你说的那样,这样做并没有什么坏处,因为ansible通常会意外地将其更改为Str。再次感谢!