variáveis - variaveis ansible



Como posso usar uma condição para definir um valor variável no Ansible? (1)

Eu tenho duas variáveis: a , b .

Quero atribuir um valor a uma variável c base na qual: a ou b contém um valor numérico maior.

Isto o que eu tentei:

- set_fact:
    c: "test1"
  when: a <= b

- set_fact:
    c: "test2"
  when: b <= a

Parece que sempre define c para test1 não test2 .


  • Usando expressão if-else :

    - set_fact:
        c: "{{ 'test1' if (a >= b) else 'test2' }}"
    
  • Usando operador ternário:

    - set_fact:
        c: "{{ (a >= b) | ternary ('test1', 'test2') }}"
    
  • Usando seu próprio código correto (veja o aviso abaixo)

Qualquer um dos métodos acima exige que as duas variáveis ​​usadas na comparação sejam do mesmo tipo para fornecer resultados razoáveis. E para uma comparação numérica, eles exigem que ambos os valores sejam inteiros.

O código da pergunta:

- set_fact:
    c: "test1"
  when: a <= b

- set_fact:
    c: "test2"
  when: b <= a

funciona corretamente em dois casos:

  • ambos: b são números inteiros
  • ambos: b são cadeias contendo valor numérico com o mesmo número de dígitos

No entanto, produz resultado inesperado é quando:

  • um dos valores é string e o outro número inteiro
  • os valores da sequência contêm valores numéricos com diferentes números de dígitos