Manipuluj danymi ansitalnymi za pomocą filtrów Jinja

Manipuluj danymi ansitalnymi za pomocą filtrów Jinja

W niektórych przypadkach, gdy używasz Ansible do automatyzacji różnych zadań, może być konieczne przekształcenie i manipulowanie danymi. W Ansible możesz użyć zestawu wbudowanych filtrów lub utworzyć niestandardowe filtry do manipulowania, przetwarzania i konwersji danych. Ansible używa filtrów szablonów Jinja2 w tle, aby umożliwić użytkownikom tworzenie filtrów dla określonych danych.

Należy zauważyć, że szablon filtra jest przeprowadzany na kontrolerze Ansible, a nie na określonych zdalnych hostach. Pomaga to zmniejszyć ilość danych przesłanych do zdalnego hosta po lokalnym przetwarzaniu. Jeśli nie znasz Jinja Templing, Jinja jest prostym, intuicyjnym, szybkim i bezpiecznym językiem szablonów dla języka programowania Python opracowanego po popularnych szablonach Django Framework.

Nie zajmiemy się tym, jak działa szablon Jinja, choć może być dodatkową zaletą, aby zrozumieć, jak to działa z szablonami.

Sprawdź zasób podany poniżej, aby dowiedzieć się więcej o Jinja.

https: // linkfy.do/jinjadocs

Jak działają filtry Ansible

Jak wspomniano, silnik filtrujący Ansible opiera się na modelu szablonów Jinja. Umożliwia to użytkownikom korzystanie z tych szablonów do wprowadzania danych, przetwarzania ich i dostarczania danych wyjściowych na podstawie zdefiniowanych filtrów.

Po przekształceniu i filtrowaniu danych za pomocą zdefiniowanego szablonu możesz użyć go do wykonywania innych zadań w Ansible. Możesz dowiedzieć się więcej o filtrach w Ansible na następującej stronie internetowej:

https: // linkfy.do/ansibleFilters

Ansible ma wiele filtrów, które są bardzo przydatne i mają zastosowanie do wielu różnych scenariuszy. Po wyjściu filtra możesz użyć go do wykonywania innych zadań, takich jak debugowanie.

Ogólna składnia do filtrowania danych jest następujące:

|

Korzystanie z filtrów Ansible

Przyjrzymy się teraz przykładom filtrów ansible, których możemy użyć do wykonywania różnych zadań.

NOTATKA: Jak wspomniano wcześniej, Ansible ma wiele filtrów, więc nie możemy omówić ich wszystkich w tym artykule. Zamiast tego ten samouczek ma na celu dostarczenie podstaw zastosowania różnych filtrów Ansible.

Przykład 1: Filtry danych formatu ansible

Filtry danych formatu ansible weź strukturę danych wyjściowych w szablonie i użyj określonego filtra, aby renderować go w formacie wywoływanym w filtrze.

Poniżej znajduje się przykładowy filtr do konwersji na JSON i YAML:

zmienna | To_Json
zmienna | to_yaml

Rozważmy na przykład następujący podręcznik:

- Gospodarze: wszystkie zadania:
- Shell: Cat /TMP /All.JSON
Zarejestruj się: wynik
- odpluskwić:
MSG: "wynik.stdout | to_nice_yaml "

Uruchomienie powyższego podręcznika wytworzy dane wyjściowe dla danych JSON przekonwertowanych na YAML. Poniżej znajduje się przykład wyjścia:

Możesz także określić inne filtry, takie jak to_nice_yaml, aby uzyskać dane wyjściowe w formacie czytelnym człowieka.

zmienna | to_nice_json
zmienna | to_nice_yaml

Korzystając z filtrów danych formatowych, możesz przekształcić dane w różne formaty i używać ich do różnych zadań.

Na przykład możesz przekazać Parse Multi-Document Yaml Strings, jak w poniższym podręczniku:

- Gospodarze: wszystkie zadania:
- Shell: Cat /TMP /All.JSON
Zarejestruj się: wynik
- odpluskwić:
MSG: "wynik.stdout | to_yaml | lista"

Przykład 2: Filtr domyślny Ansible

Filtr domyślny ansible pomaga domyślnie wartości do niezdefiniowanych zmiennych. Domyślna konfiguracja Ansible nie jest zdefiniowane zmienne. Na przykład, jeśli masz niezdefiniowaną zmienną, możesz powiedzieć Ansible, aby domyślnie wartość zamiast podnoszenia błędu.

Ogólna składnia dla domyślnego filtra jest następująca:

|. domyślna wartość)

Na przykład:

- Gospodarze: Wszyscy
vars:
Zadania:
set_fact:
undef_var: "0_var | domyślnie (5)"

Powyższy podręcznik ustawi wartość zmiennej „0_var” na 5, jeśli nie jest wyraźnie zdefiniowany, zamiast wywierać błąd.

Aby zdefiniować zmienną, możesz użyć obowiązkowego filtra. Wszystko, co musisz zrobić, to zapoznać się z powyższym przykładem i zastąpić domyślną obowiązkową:

0_var | obowiązkowy

Przykład 3: Ansible Debug Filtry

Podczas debugowania możesz użyć filtra type_debug, aby uzyskać informacje o typie zmiennej. Zmienny typ będzie w Python, ponieważ silnik jest oparty na Pythonie. Ogólna składnia filtra jest następująca:

zmienna | type_debug

Przykład 4: Filtry matematyczne

Filtry matematyczne Ansible pozwalają wykonywać zapytania związane z matematyką. Te filtry zawierają następujące:

  1. Filtr logarytmu - zmienna | log - Określa podstawę logarytmu w nawiasach jako zmienna | log (2)
  2. Filtr mocy - zmienna | Pow (3) - Zwraca zmienną podwyższoną do określonej mocy
  3. Absolutny filtr - zmienna | ABS - Zwraca wartość bezwzględną dla przekazanej zmiennej
  4. Filtr korzeniowy - zmienna | root - To zwraca pierwiastek kwadratowy zmiennej. Aby wyraźnie określić korzeń, przekaż wartość w nawiasach; Na przykład, cube root zmienna | root (3)

Te filtry matematyczne mogą być dość przydatne, szczególnie w przypadku dużych ilości danych i operacji matematycznych.

Przykład 5: Filtry skrótu

Filtry skrótu Ansible pozwalają uzyskać skrót ciągu lub przekazane dane. W większości przypadków nie będziesz potrzebować tych filtrów, ale są one dostępne do użycia, jeśli potrzeba. Te filtry zawierają następujące:

  1. SHA1 - var | hash („sha1”)
  2. SHA256/SHA512 - var | hasło_hash („SHA256/512”)
  3. MD5 - var | Hash („MD5”)
  4. String Regania - var | Suma kontrolna

Inne przydatne filtry

Jak zapewne zauważyłeś, Ansible ma wiele filtrów. Niektóre filtry Ansible, które mogą być przydatne, zawierają następujące:

  • Filtr podzielony URL - „Programista@https: // linuxhint.com: 8080/indeks.html?zapytanie = Linux ”| URLSPILT („nazwa hosta”), - Zwraca „Linuxhint.com ”
  • Lista dołączania - lista | dołącz - używany do dodania listy do łańcucha var
  • Ścieżka katalogu - ścieżka | dirname
  • Rozwiń Tyldę - ścieżka | expanduser

Wniosek

Filtry Ansible są przydatne podczas wykonywania zadań debugowania lub potrzebujesz konkretnych informacji bez zbyt dużego pisania. Ponieważ ansible obsługuje niestandardowe filtry, filtry te mogą być szczególnie przydatne w określonych przypadkach użycia.