2013-06-17 15 views
15

Grundsätzlich Ich schaffe einen Salz Zustand beschreibt Munin-Server-Konfiguration und ich brauche eine Liste aller Günstlinge zum Master bekannt zu bekommen, so etwas wie dieses:Wie bekomme ich eine Liste aller Salz Minions in einer Vorlage?

{% for host in pillar['munin_clients'] %} 
[{{ host.fqdn }}] 
    address {{ host.ip }} 
    use_node_name yes 
{% endfor %} 

Der einzige Unterschied ist, dass ich nicht wollen benutze die Säule dafür, ich brauche diese Liste dynamisch zu besetzen. ret.get_minions scheint relevant zu sein, aber ich kann es aus irgendeinem Grund nicht funktionieren. Was sind meine Möglichkeiten?

Antwort

15

ich es geschafft, diese mit Salzmine System (Dank an die Mitglieder des Salz Benutzer Google-Gruppe) zu erreichen:

{% for host, hostinfo in salt['mine.get']('*', 'network.interfaces').items() %} 
[{{ host }}] 
    address {{ hostinfo['eth0']['inet'][0]['address'] if hostinfo['eth0'].has_key('inet') else hostinfo['br0']['inet'][0]['address'] }} 
    use_node_name yes 
{% endfor %} 

I

mine_functions: 
    network.interfaces: [] 

bis Ende /etc/salt/minion auf jeden hinzuzufügen hatte Knoten, um die Salzmine zu aktivieren.

+0

Schön! Ich bin froh, dass du es herausgefunden hast. Das Bergwerk ist großartig. =) – basepi

+4

Nur ein Vorschlag: Sie können die Datei /etc/salt/minion.d/mine.conf mit Salz bereitstellen und sie mit Salz verwalten. – gajdipajti

+0

funktioniert das auch mit salt-ssh? –

9

Alex Antwort ist großartig. Die Salzmine gibt dir die Liste der Schergen, die seit der letzten Mine korrekt waren.

Wenn Sie mit den zweiten Daten leben möchten, können Sie die Peer-Schnittstelle verwenden, indem Sie das Veröffentlichungsmodul verwenden. Veröffentlichen Modul docs sind hier: http://docs.saltstack.com/ref/modules/all/salt.modules.publish.html#module-salt.modules.publish

{% for host in salt['publish.publish']('*', 'network.ip_addrs', 'eth0') %} 
[{{ host.fqdn }}] 
    address {{ host.ip }} 
    use_node_name yes 
{% endfor %} 

Stellen Sie sicher, Ihre Master-Config einstellen die Günstlinge zu ermöglichen network.ip_addrs auszuführen.

EDIT:

eine Frage zu beantworten, unten Sie den Host ermöglichen müssen andere Günstlinge durch die Peer-to-Abfrage-Schnittstelle veröffentlichen. Damit alle Schergen die IP-Adressen aller anderen Schergen abzufragen, fügen Sie diese zu Ihrer/etc/Salz/Master:

peer:                   
    .*: 
    - network.ip_addrs 
+0

Woher kommt 'host. *'? Wenn ich nur 'salt-call network.ip_addrs' starte, sehe ich nur eine Liste von IP-Adressen. Zweitens, die Dokumentation sagt nur "Sie müssen die Veröffentlichung auf dem Master aktivieren", aber alles, was ich dort finde, ist der 'publish_port', und es ist nicht klar, was die Implikationen davon sind. – pwaller

+0

Perfekt, danke @Utah_Dave - das funktioniert wie ein Zauber, ohne dass du jedem Diener zusätzliche Dateien hinzufügen musst. –

+0

@pwaller Der Link https://docs.saltstack.com/en/latest/ref/peer.html zusammen mit Seite für Publish-Modul kombiniert hat genug Informationen zu Ihren Fragen –

3

Warum nicht minion.list Modul verwenden?

In unserer Säulenumgebung haben wir eine Säule, die jedem Diener privat ist (/ srv/säule/hosts/[server_A, server_B, server_C ...]/some_pillar.sls).

Zur Vereinfachung sieht unsere Säule (da einige Leute neue Säulen nach oben Datei hinzuzufügen vergessen immer wieder) top-Datei wie folgt:

{{ saltenv }}: 
    {% for minion in salt['minion.list']()['minions'] -%} 
    {{ minion + '*' }}: 
    - hosts.{{ minion.split('.')[0] }} 
    {% endfor -%} 

So kann ich eine Liste aller Günstlinge bekannt bekommen kann der Master jedes Mal, wenn die Säulenumgebung aktualisiert wird.