/ / jinja / ansible converte la stringa in booleano - python-3.x, ansible, jinja2

jinja / ansible converte stringa in boolean - python-3.x, ansible, jinja2

Ho bisogno della cosa semplice - se la variabile è false o stringa vuota, quindi valutare false. Altrimenti valuta vero.

Provai bool(var) ma sto ottenendo:

UndefinedError: "bool" is undefined

Poi ho provato var | bool ma anche se var non è vuoto, ciò valuta false. Come far funzionare quella condizione ??

risposte:

1 per risposta № 1

Ho trovato una possibile soluzione in stile rubino:

    when: not not var

Ma è piuttosto brutto. Ho dimenticato di dirlo senza not not il var restituisce una stringa in modo che gli errori rispondano. Spero in una risposta migliore, quindi per favore aggiungi un'altra risposta se hai.


0 per risposta № 2

Il tuo problema principale è che qualsiasi cosa diversa da "true" verrà valutata come falsa durante l'utilizzo var | bool.

Se lo fornite sempre come stringa (ad es. var: "" o var: "false") quindi puoi semplicemente verificare l'uguaglianza delle stringhe:

when: condition == "false" or condition == ""

Facoltativamente aggiungendo anche il controllo booleano se hai questa possibilità:

when: not condition or condition == "false" or condition == ""

In alternativa, è possibile impostare un valore booleano predefinito e, facoltativamente, eseguire l'override. Ad esempio, potresti avere un ruolo con un compito condizionale:

ruoli / foo / attività / main.yml

- name: echo foobar
shell: echo "foobar"
when: echo_foo

ruoli / foo / default / main.yml

echo_foo: false

Ma potremmo sovrascriverlo a livello di gruppo o host:

group_vars / foobar-nodes.yml

echo_foo: true