2015-06-17 8 views
9

Ich habe eine Aufgabe wie folgt geschrieben, kann aber nicht verstehen, '|' tut das?Ansible jinja2 filter '|' (pipe) was bedeutet das?

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

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

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

Auch ich habe einige Beispiele im Web gefunden, kann aber nicht verstehen, was '|' tut das?

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

Ein weiteres Beispiel:

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

wäre toll, wenn jemand in Einzelheiten erklären oder mich zu einem gewissen URL verweisen?

Jede Hilfe wäre willkommen.

Danke.

+3

Haben Sie die [jinja docs] (http://jinja.pocoo.org/docs/dev/templates/#filters) überprüft? – bereal

Antwort

18

Mit dem Pipe-Zeichen übergeben Sie einen Wert an einen Filter. Es gibt zahlreiche Jinja 2 filters aber Ansible brings some additional filters.

Der Begriff Filter könnte manchmal verwirrend sein, weil alle Filter sehr unterschiedlich funktionieren. Einige reduzieren zum Beispiel eine Ergebnismenge eines Hash/Arrays, manche modifizieren den Inhalt einer Zeichenfolge, aber dann gibt es Filter, die einfach wahr oder falsch zurückgeben.

Eine bessere Erklärung könnte sein, dass diese Modifikatoren sind und sie alles mit Ihren Daten tun können. Sie können sogar write your own filters.

Filter können verkettet werden, wobei das Ergebnis vom ersten Filter zum nächsten und so weiter geleitet wird. Es funktioniert genau wie Piping-Befehle auf einer Unix-Shell.

"value" | filter1 | filter2 | filterN 

Die failed Filter zurück true wenn das übergebene Ergebnis ausgefallen ist. Es prüft einfach die failed Eigenschaft von result.

Der Filter changed ist derselbe, überprüft jedoch, ob das übergebene Ergebnis Änderungen aufweist. Es prüft die changed Eigenschaft von result.

ipaddr | replace(",", ".") ersetzt alle Vorkommen von , mit .. Daher wird ein Wert von 127,0,0,1 in 127.0.0.1 umgewandelt.

Der Filter default legt einen Standardwert fest, wenn die Eingabe null war, z. eine undefinierte Variable. undefined_var | default("var was undefined")10 -> Dies wird entweder den Inhalt von undefined_var oder die Zeichenfolge "Var war undefiniert" drucken. In Ihrem obigen Beispiel geben Sie den Wert des 2. Elements D (D[1]) aus und wenn es nicht existiert, stattdessen den Stich "undefiniert".