Jak sprawdzić wyniki Jinja w Saltstack?


16

Mam szablon SLSw Salt, który próbuję zbudować, ale emituje niepoprawną składnię, co powoduje błędy, takie jak:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

Zasadniczo powinna istnieć możliwość, w jakiś sposób, zbadania danych wyjściowych szablonu Jinja przed próbą przetworzenia danych wyjściowych jako SLSpliku. Istnieje moduł Python dla mechanizmu renderującego Jinja salt.renderers.jinja, ale jeśli spróbuję go uruchomić w interfejsie CLI, pojawia się błąd:

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

Jak mogę zobaczyć wyniki mojego szablonu? Wydaje się absurdalne, że debugowanie powinno być tak trudne.

Odpowiedzi:


11

Sprawdź moduł slsutil.renderer .

To powinno zrobić, co chcesz

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

Ten moduł wywołuje dla Ciebie funkcję compile_template.

Edycja: /srv/salt/network/init.sls jest ścieżką na stwora, jeśli nie jesteś celem stwora jako stwora, prawdopodobnie będziesz musiał wykonać następujące czynności.

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

lub wskaż dowolny plik, który wylewa plik_pamięci podręcznej.

Jeśli korzystasz z wersji 2018.3 lub nowszej, możesz po prostu określić salt://network/init.sls


Ale jaką ścieżką jest / srv / salt / network? Czy to ścieżka do mistrza? Stwórca?
Mrten

To ścieżka do stronnika. Możesz to zrobić, salt minion-id cp.cache_file salt://network/init.slsa następnie uruchomić slsutil.renderer przeciwko plikowi, który wypluwa z powrotem po zapisaniu w pamięci podręcznej stwora lub od 2018.3. Możesz po prostu określićsalt://network/init.sls
gtmanfred

8

Biorąc pod uwagę, ile czasu spędziłem tygodnie temu, borykając się ze ściśle związaną z tym kwestią, chciałbym, aby to wcześniej wymyślić.

Wydaje się, że rozwiązaniem jest skorzystanie salt.modules.cp.get_templatez tego, aby stwór soli pobrał plik, wyrenderował go przez silnik szablonów i umieścił w czytelnym miejscu:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

Stamtąd łączysz się z my-minion-idhostem i sprawdzasz plik, który umieściłeś /root/network.sls.

To ma sens; salt.renderers.jinjaznajduje się w salt.renderersprzestrzeni nazw, natomiast moduły, do których masz dostęp z poziomu CLI, znajdują się w salt.modulesprzestrzeni nazw.

Ma to również sens z punktu widzenia widoczności danych; renderowanie szablonów odbywa się na stwórzu , gdzie ziarna i tym podobne są dostępne, a ja jeszcze nie widziałem modułu, który wykonuje kod stwora, zwraca dowolne dane wyjściowe do mastera (na przykład do wyświetlenia w interfejsie CLI); zwracane dane są zawsze dobrze skonstruowane i zwięzłe. (Może być taki moduł, ale nie wiem, co to jest. Byłoby lepszym rozwiązaniem upuszczenie plików testowych na stwora).

edit: Odpowiedź @ gtmanfred jest znacznie lepsza i bardziej bezpośrednia, a ja ją zaakceptowałem. Zostawiam to tutaj w celach informacyjnych. To nie jest najlepsze rozwiązanie, ale nadal działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.