Ansible: Как сделать арифметику c для целочисленной переменной в модуле set_fact? - PullRequest
1 голос
/ 16 апреля 2020

Кто-нибудь знает, как сделать арифметическое c присваивание для целочисленных переменных в модуле set_fact? В настоящее время мне удалось сделать это с помощью переменной String с использованием шаблона 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}}"

Результат вернет 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}}"

1 Ответ

1 голос
/ 16 апреля 2020

Q: "Я не знаю, как это сделать для целочисленных переменных, так как при таком же выполнении он выдаст ошибку."

A: Вы не сделали это так же. Все четыре варианта во втором примере отличаются от первого. Фактически, и строка, и целое число дают одинаковый результат при использовании в первом примере.

Необходимо вычислить выражение "{{}}". Если переменная flagStr является целым числом flagStr: 0, нет необходимости преобразовывать ее в целое число. Это тоже не больно. Задание ниже работает как положено.

    - set_fact:
        flagStr: 0
    - set_fact:
        flagStr: "{{ flagStr + 1 + 1 + 1 }}"
    - debug:
        var: flagStr
...