Ich versuche, einen Dummy-Status in Salt zu erstellen, um Abhängigkeiten aus einer Liste abzurufen, die von einer Säule abgeleitet wurde.
In meiner top.sls
Datei habe ich:
base:
'*':
- components
Dann habe components.sls
ich:
{% if 'components' in pillar.items() %}
include:
{% for component in pillar.get('components',[]) %}
- {{ component }}
{% endfor %}
{% endif %}
{% if 'components' in pillar.items() %}
components:
require:
{% for component in pillar.get('components',[]) %}
- {{ component }}
{% endfor %}
{% endif %}
Wenn ich den Inhalt der Säule überprüfe, sehe ich:
$ salt my-minion-id pillar.items
my-minion-id:
----------
components:
- a-dependency-name
Aber wenn ich versuche, die Menge der Zustände zu sehen, sehe ich:
$ salt my-minion-id state.show_sls components
my-minion-id:
----------
...und das ist es.
Mein ultimatives Ziel hier ist es, den Diener als feindlich zu behandeln, also versuche ich, Rollendetails aus den Säulen zu ziehen, anstatt Rollen in meinen file_root
zuzuweisen top.sls
. Nach meinem Verständnis hat jeder Minion vollen Zugriff auf den Inhalt von file_root, und ich möchte nicht, dass ein feindlicher Minion die spezifische Firewall oder die Dienste eines nicht verwandten Knotens kennt.
Bearbeiten:
Ich stellte fest, dass meine Säulenstruktur das Zusammenführen von Säulen nicht unterstützte, da Listen verwendet wurden, und wechselte daher zu einer Säulenstruktur, die keine Wertvorgaben verwendete:
my-minion-id:
----------
components:
----------
a-dependency-name:
None
quelle
Antworten:
Diese SLS-Vorlagendatei funktioniert hervorragend:
Es erfordert jedoch eine Änderung meiner Säulenschlüsselstruktur. Aus der ursprünglichen Frage geht hervor, dass die Struktur wie folgt aussieht:
Stattdessen muss es sein:
Beachten Sie, dass dies
a-dependency-name
jetzt ein Diktat ist und einen einzelnen Schlüssel / Wert hatNone
. Daher muss die Säule SLS-Datei von ändernzu
Sie können zwar keine wertlosen Wörterbücher verwenden (und damit die
.keys()
in der Vorlage enthaltenen Wörterbücher entfernen ) und stattdessen Listen verwenden. Wenn Sie dies jedoch tun, können Sie die Wörterbücher nichtcomponents
aus mehreren verschiedenen Säulen zusammenführen. Jede Säule, die Salt anwendet, überschreibt dencomponents
Schlüssel der vorherigen und die zuletzt gelesene Säule gewinnt. Wenn Sie Säulen zusammenführen möchten (wir sind im Gespräch über rollenbasierte Zuordnung, hier), scheint dies das notwendige Konstrukt zu sein.Damit ist die Ausgabe von
salt my-minion-id state.show_sls components
dann korrekt:pillar.items()
in Jinja stellt sich heraus, dass Vorlagen nicht ganz gleichwertig sind mitsalt.pillar.items()
; Wenn Sie beispielsweise versuchenpillar.ls()
, Folgendes zu verwenden, wird möglicherweise der folgende Fehler angezeigt:Ob dies bedeutet, dass man die implizite
salt.
Präfixverknüpfung, die Jinja bereitstellt, vermeiden oder stattdessen ein Konstrukt wie{% if pillar['components'] is defined %}
(danke, @brousch, für den Rat) verwenden sollte, kann ich nicht sagen.quelle
Sie können es auch so machen:
quelle