2015-06-17 29 views
9

Ho scritto un'attività come sotto ma non riesco a capire cosa '|' lo fa?Filtri jinja2 anonimi '|' (pipe) cosa significa?

tasks: 
- shell: /usr/bin/foo 
    register: result 
    ignore_errors: True 

- debug: msg="it failed" 
    when: result|failed 

- debug: msg="it changed" 
    when: result|changed 

Inoltre ho trovato alcuni esempi sul web ma non riesco a capire cosa '|' lo fa? più

debug: msg={{ ipaddr |replace(",", ".") }} 

Un esempio:

- hosts: localhost 
    vars: 
    D: 
     1 : "one" 
     2 : "two" 
    tasks: 
    - debug: var=D 
    - debug: msg="D[1] is {{ D[1]|default ('undefined') }}" 

Sarebbe bello se qualcuno può spiegare in dettagli o punto a me un po 'URL?

Qualsiasi aiuto sarebbe apprezzato.

Grazie.

+3

Hai controllato [jinja docs] (http://jinja.pocoo.org/docs/dev/templates/#filters)? – bereal

risposta

18

Con il carattere pipe si passa un valore a un filtro. Ci sono numerosi Jinja 2 filters ma Ansible brings some additional filters.

Il termine filtro può essere fonte di confusione a volte perché tutti i filtri funzionano in modo molto diverso. Alcuni, ad esempio, riducono un set di risultati di un hash/array, alcuni modificano il contenuto di una stringa, ma poi ci sono filtri che restituiscono semplicemente true o false.

Una spiegazione migliore potrebbe essere che quelli sono modificatori e possono fare qualsiasi cosa con i dati passati. Puoi anche write your own filters.

I filtri possono essere concatenati, passando il risultato dal primo filtro al successivo e così via. Funziona esattamente come i comandi di piping su una shell Unix.

"value" | filter1 | filter2 | filterN 

Il filtro failed ritorna true se il risultato passato ha fallito. Controlla semplicemente la proprietà failed da result.

Il filtro changed è lo stesso, ma verifica se il risultato passato ha delle modifiche. Controlla la proprietà changed da result.

ipaddr | replace(",", ".") sostituisce tutte le occorrenze di , con .. Quindi un valore di 127,0,0,1 verrà trasformato in 127.0.0.1.

Il filtro default imposterà un valore predefinito se l'input era nullo, ad es. una variabile indefinita. undefined_var | default("var was undefined") -> Questo stamperà il contenuto di undefined_var o la stringa "var wasdefinito". Nell'esempio sopra riportato, si emette il valore del 2 ° elemento di D (D[1]) e se invece non esiste il segno "non definito".

Problemi correlati