Ansible:如何在set_事实模块中对整型变量进行运算?

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_事实模块中对整数变量进行算术赋值吗?目前,我使用字符串变量和Jinja2模板实现了这一点,如下所示:

    - 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。再次感谢!