2016-10-27 3 views
0

Brauchen Sie etwas Hilfe, wie ich jetzt ein wenig fest bin. Das Endziel ist es, einen Zustand zu haben, der generisch ist und es uns erlaubt, unsere pem-cert-Dateien an jeden Server zu senden, der sie benötigt, und an verschiedene Verzeichnisse für jeden Server. Ich hoffe das ergibt Sinn. Mit anderen Worten, ich möchte keinen separaten Status für jeden Server, um PEM-Dateien zu verteilen.Saltstack und machen Staaten Generika

Was ich habe, so weit:

Hauptzustand in den entsprechenden Servern enthalten sein (ich habe die spezifischen Details für Variablen, um etwas anderes geändert):

{% if 'custom_id' in pillar.get('the_custom_id') %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% elif 'another-custom_id' in pillar.get('the_custom_id') %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% else %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% endif %} 

{{ certpath }}: 
    file.directory: 
    - user: {{ theuser }} 
    - group: {{ theuser }} 
    - file_mode: 600 
    - dir_mode: 755 
    - makedirs: True 
    - recurse: 
    - user 
    - group 
    - mode 

{% for cert_type in pillar.get('pem_certs', {}) %} 
{{ certpath }}{{ cert_type }}.pem: 
    file.managed: 
    - context: 
     cert_type: {{ cert_type }} 
    - mode: 600 
    - source: salt://path/to/file/filename 
    - template: jinja 
{% endfor %} 

Der Inhalt der Quelle der Datei .verwaltet oben:

{{ pillar['pem_certs'][cert_type] }} 

Die Pillar-Datei in der pillar.get-Funktion würde dann die PEM-Taste enthalten.

pem_certs: 
    ca-cert: 
    -----BEGIN CERTIFICATE--------- 
    etc 

Die Umgebung des Salzstacks läuft und läuft einwandfrei. Die gleiche Route wurde beim Hinzufügen der privaten Schlüssel rsa_id für Minions genommen, die gut funktionieren. Das file.directory funktioniert einwandfrei und erstellt das Verzeichnis und wendet den richtigen Benutzer entsprechend an.

Vom Debuggen kann ich sehen, dass der file.managed Zustand nicht gerendert wird und ich weiß nicht warum.

Debug-Ausgabe vom Laufen den Zustand:

[DEBUG ] Rendered data from file:  /var/cache/salt/minion/files/base/path/to/state.sls: 

/path/to/certs: 
    file.directory: 
    - user: theuser 
    - group: theuser 
    - file_mode: 600 
    - dir_mode: 755 
    - makedirs: True 
    - recurse: 
      - user 
      - group 
      - mode 

[DEBUG ] LazyLoaded config.get 

Derzeit gehe davon aus, dass ich die pillar.get nicht abruft oder nicht pem_certs abzurufen. Gibt es eine Möglichkeit, dies speziell zu testen?

Kann jemand da draußen helfen?

Antwort

1

Sie tun derzeit {% for cert_type in pillar.get('pem_certs', {}) %}, die ein leeres Diktat zurückgibt, wenn es nicht in der Säule des Dieners vorhanden ist - ich denke, das ist die erste Sache, um damit zu beginnen.

Zum Debuggen möchten Sie wissen,, wenn Daten für Ihren Untergebenen zur Verfügung stehen, indem Sie etwas wie salt 'minionid' pillar.get pem_certs tun. Wenn die Säulen-Daten nicht angezeigt werden, überprüfen Sie die Top.sls Ihrer Säule. Werden die Pfeilerdaten korrekt auf Ihren Diener angewendet?

Ferner sollten Sie überlegen, {% for cert_type, cert_data in pillar.get('pem_certs', {}).iteritems() %} mit - wenn so tun, können Sie direkt den Inhalt an den Kontext Ihrer file.manage Vorlage übergeben und müssen nicht mehr für Säule Daten innerhalb der Schablone zur Abfrage mehr.

0

Ein großes Dankeschön an Dahrens für seine Hilfe bei der Verfolgung des Problems. Ich hatte einen Verweis für den Diener auf die Säulendaten mit den PEM-Zeugnissen weggelassen.

Alles funktioniert jetzt gut.