2015-06-17 10 views
9

Napisałem zadanie jak poniżej, ale nie rozumiem, co "|" robi?Ansible jinja2 filters '|' (pipe) co to znaczy?

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

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

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

Również znalazłem kilka przykładów w Internecie, ale nie mogę zrozumieć, co "|" robi?

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

Jeszcze jeden przykład:

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

Byłoby wspaniale, jeśli ktoś może wyjaśnić szczegółów lub wskazać mi jakiś URL?

Każda pomoc zostanie doceniona.

Dzięki.

+3

Czy sprawdziłeś [jinja docs] (http://jinja.pocoo.org/docs/dev/templates/#filters)? – bereal

Odpowiedz

18

Po znaku potoku przekazujesz wartość do filtra. Istnieje wiele Jinja 2 filters, ale Ansable brings some additional filters.

Termin filtr może być nieco mylący, ponieważ wszystkie filtry działają zupełnie inaczej. Niektóre na przykład redukują zestaw wyników tablicy hash/array, niektóre modyfikują zawartość ciągu, ale są też filtry, które po prostu zwracają true lub false.

Lepszym wyjaśnieniem może być to, że są to modyfikatory i mogą zrobić wszystko z przekazanymi danymi. Możesz nawet write your own filters.

Filtry można połączyć, przekazując wynik z pierwszego filtra do następnego itd. Działa dokładnie tak samo, jak polecenia na powłoce unixowej.

"value" | filter1 | filter2 | filterN 

Filtr failed zwraca true jeśli przekazany wynik nie powiodło się. Po prostu sprawdza właściwość failed od result.

Filtr changed jest taki sam, ale sprawdza, czy wynik przeszły zmiany. Sprawdza właściwość changed od result.

zamienia wszystkie wystąpienia , na .. Dlatego wartość 127,0,0,1 zostanie przekształcona na 127.0.0.1.

Filtr default ustawi wartość domyślną, jeśli wejście ma wartość zerową, np. niezdefiniowana zmienna. undefined_var | default("var was undefined") -> Spowoduje to wydrukowanie zawartości undefined_var lub napisu "var was undefined". W twoim przykładzie powyżej wypiszesz wartość drugiego elementu z D (D[1]), a jeśli nie istnieje, żądło "niezdefiniowane".