Wie kann man die Jinja-Ausgabe in Saltstack untersuchen?


16

Ich habe ein Templat SLSin Salt, das ich zu erstellen versuche, aber es gibt eine ungültige Syntax aus, die zu Fehlern führt, wie zum Beispiel:

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

Im Prinzip sollte es möglich sein, irgendwie die Ausgabe der Vorlage Jinja zu untersuchen , bevor sie den Ausgang als zu analysieren versucht SLSDatei. Es gibt ein Python-Modul für den Jinja-Renderer salt.renderers.jinja, aber wenn ich versuche, es auf der CLI auszuführen, erhalte ich eine Fehlermeldung:

# 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

Wie kann ich die Ausgabe meiner Vorlage sehen? Es scheint absurd, dass es so schwierig sein sollte, Fehler zu beheben.

Antworten:


11

Überprüfen Sie das slsutil.renderer- Modul.

Dies sollte tun, was Sie wollen

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

Dieses Modul ruft nur die Funktion compile_template direkt für Sie auf.

Bearbeiten: /srv/salt/network/init.sls ist der Pfad auf dem Diener. Wenn Sie den Meister nicht als Ihren Diener anvisieren, müssen Sie wahrscheinlich Folgendes tun.

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

oder zeigen Sie auf die Datei, die cache_file ausspuckt.

Wenn Sie auf 2018.3 oder neuer sind, können Sie nur angeben salt://network/init.sls


Aber welcher Pfad ist / srv / salt / network? Ist es der Weg des Meisters? Der Diener?
Mrten

Es ist ein Pfad auf dem Diener. Sie können salt minion-id cp.cache_file salt://network/init.slsslsutil.renderer für die zurückgespeicherte Datei ausführen, nachdem sie auf dem Minion zwischengespeichert wurde. Ab 2018.3 können Sie auch salt://network/init.sls
Folgendes

8

Angesichts der Zeit, die ich vor Wochen mit einem eng verwandten Thema verbracht habe, wünschte ich, ich hätte das früher herausgefunden.

Die Lösung scheint darin zu bestehen, salt.modules.cp.get_templatedass der Salt Minion die Datei abruft, sie durch die Templating-Engine rendert und an einem lesbaren Ort ablegt:

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

Von dort stellen Sie eine Verbindung zum my-minion-idHost her und überprüfen die Datei, in der Sie sich befinden /root/network.sls.

Das macht Sinn; salt.renderers.jinjabefindet sich im salt.renderersNamespace, während sich die Module, auf die Sie über die CLI zugreifen können, im salt.modulesNamespace befinden.

Dies ist auch unter dem Gesichtspunkt der Datensichtbarkeit sinnvoll. Template-Rendering findet auf dem Minion statt , auf dem Körner und dergleichen verfügbar sind, und ich habe noch kein Modul gesehen, das Minion-Code ausführt, um willkürliche Ausgaben an den Master zurückzugeben (zum Beispiel für die Anzeige auf der CLI). Die zurückgegebenen Daten sind ausnahmslos gut strukturiert und präzise. (Es mag ein solches Modul geben, aber ich weiß nicht, was es ist. Es wäre eine vorzuziehende Lösung, Testdateien auf einen Minion abzulegen.)

edit: @gtmanfreds Antwort ist viel besser und direkter, und ich habe diese akzeptiert. Ich lasse dieses hier zu informativen Zwecken. Es ist nicht die beste Lösung, aber es funktioniert immer noch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.