Wie kann ich Salt-SSH dazu bringen, ein lokales Skript auf einem Remote-Knoten auszuführen?

Wie kann ich Salt-SSH dazu bringen, ein lokales Skript auf einem Remote-Knoten auszuführen?

.::UPDATE-GELÖST::.

Mit der nötigen Unterstützung von @wirap funktioniert es jetzt. Ich habe einen symbolischen Link zum Skriptverzeichnis erstellt /etc/salt/states/scriptsund mit dieser test.slsKonfiguration funktioniert es jetzt.

/root/bin/updater/scripts/pam-setup-access:
    file.managed:
      - name: /tmp/pam-setup-access
      - source: salt://scripts/pam-setup-access
      - mode: 0700
run_script:
   cmd.run:
      - name: /tmp/pam-setup-access
   file.absent:
      - name: /tmp/pam-setup-access

Ich bin neu bei Salt-SSH und schaue mir einige Informationen anHierbezüglich der Ausführung eines Skripts, das sich auf meiner Admin-Box ( /root/bin/updater/scripts/pam-setup-access) auf einem Remote-Knoten befindet, für den ich ebenfalls Root-Zugriff habe.

Ich habe eine stateDatei erstellt (siehe unten), bin mir aber nicht sicher, wo ich sie ablegen soll. Das salt-sshDokumentenur erwähnen /etc/salt/master, also habe ich nachgeschaut, aberdiese Dokumentescheint spezifisch für Vagrant und Paketinstallation zu sein.

add script:
    file.managed:
    - name: pam-setup-access
    - source: /root/bin/updater/scripts/pam-setup-access

run script:
    cmd.run:
    - name: pam-setup-access

Zuletzt habe ich versucht, die Statusdatei einfach aus dem aktuellen Verzeichnis auszuführen, wie im ersten Link gezeigt, aber das hat nur zu Problemen geführt. Was übersehe ich?

# salt-ssh '*' state.apply test.sls 
nod0:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

nod1:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

.:: AKTUALISIEREN ::.

Ich muss Salt-SSH verwenden, da sich mehrere „Minions“ in einem vom Master getrennten Netzwerk (DMZ) befinden. So wie ich es verstehe, erfordert das traditionelle Salt-Setup, dass Minions eine Verbindung zum Salt-Master herstellen.

Seit dem Posten habe ich salt-ssh installiert vondas Saltstack-Repowodurch der obige Fehler anscheinend behoben wurde msgpack. Ich habe auch einige der Beispiele aus dem Vagrant-spezifischen Link oben geändert und eine masterDatei und statesein Verzeichnis unter hinzugefügt /etc/salt. Ich habe die Statusdatei (oben) unter abgelegt /etc/salt/states/test.sls. Die Ergebnisse sind unten aufgeführt.

Ich habe Unterstriche zwischen add scriptund eingefügt run script, wie von @wirap vorgeschlagen. Das hat mich weitergebracht, wie unten gezeigt. Es scheint, dass ein Fehler im Zusammenhang mit dem Skriptpfad auf dem Client oder Server vorliegt. Ich bin mir noch nicht sicher. Es scheint, dass ich nur state.applymit dem Namen der .slsDatei aufrufen muss (ohne die Erweiterung .sls).

/etc/salt/master:

file_roots:
   base:
      - /etc/salt/states

Wenn ich jetzt salt-ssh starte, erhalte ich:

# salt-ssh '*' state.apply test
nod0:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.237379
    Duration: 0.602 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.238629
    Duration: 8.297 ms
     Changes:   
              ----------
              pid:
                  1037
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod0
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.899 ms
nod1:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.476743
    Duration: 0.555 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.477906
    Duration: 7.5 ms
     Changes:   
              ----------
              pid:
                  30772
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod1
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.055 ms

Antwort1

  1. Möchten Sie wirklich salt-ssh verwenden („Führen Sie Salt-Befehle und -Status über SSH aus, ohne einen Salt-Minion zu installieren.“). Sie müssen dies nur tun, wenn Sie Salt-Minion nicht auf Ihren Minions installieren können.
  2. Wo hast du deine Zustände abgelegt? Normalerweise schreibst du in die /etc/salt/master-Konfiguration dasPfad, in dem sich Ihre Statusdateien befinden sollten
  3. Verwenden Sie den im Beispiel angegebenen Status nicht wörtlich. Ich bin ziemlich sicher, dass Sie kein Leerzeichen in derID-Deklaration( add script:).
  4. Deine Fehlermeldung ist mir unbekannt. Dieser ThreadHiermacht folgenden Vorschlag:„Der msgpack-Fehler ist sehr irreführend, da er in keinerlei Zusammenhang steht. Es scheint, dass eine Ihrer server.conf-Dateien auf einem Minion ungültiges UTF-8 hat und die Datei auf dem anderen nicht existiert?“Ich vermute stark, dass es sich um das Leerzeichen (' ') in Ihrer Status-ID handelt. Meiner Erfahrung nach kann SaltStack ziemlich irreführende Fehlermeldungen ausspucken, wenn Ihre Statusdateien oder -säulen ungültige Zeichen enthalten.

Zusätzliche Hinweise:

  • SuchenHierfür Informationen zum Einrichten Ihres Statusbaums.
  • Vielleicht verwenden Sie eine vorinstallierte Installation von SaltStack (Docker, Vagrant?), die bereits funktioniert, um zu lernen, wie es funktioniert. Da UtahDave bei SaltStack ziemlich aktiv ist, würde ich seine verwendenDemo(Haftungsausschluss: Habe das nicht selbst getestet!)

Aktualisieren: Wenn Sie file.managed verwenden:

  • Der Parameter sourceist file.managedder Pfad auf Ihrem Master (relativ zu Ihrem Statuspfad), nicht das Ziel.
  • Sie müssen den Pfad zum Ziel angeben. Aus diesem Grund erhalten Sie den folgenden Fehler:„Die angegebene Datei pam-setup-access ist kein absoluter Pfad“

Beispiel:

/root/bin/updater/scripts/pam-setup-access
   file.managed:
     - source: salt://files/pam-setup-access

ist das gleiche wie:

some-arbitrary-id
    file.managed:
    - name: /root/bin/updater/scripts/pam-setup-access
    - source: salt://files/pam-setup-access

https://docs.saltstack.com/en/develop/ref/states/all/salt.states.file.html#module-salt.states.file

Dasselbe gilt für cmd.run.

Lies dasallgemeinSaltStack-Tutorial. Beim Entwerfen von Zuständen spielt es keine Rolle, ob Sie Salt-SSH oder Salt verwenden. Lassen Sie sich davon nicht verwirren.

verwandte Informationen