¿Cómo puedo hacer que salt-ssh ejecute un script local en un nodo remoto?

¿Cómo puedo hacer que salt-ssh ejecute un script local en un nodo remoto?

.::ACTUALIZACIÓN-SOLUCIONADO::.

Con la ayuda imprescindible de @wirap, ahora está funcionando. He vinculado simbólicamente el directorio del script /etc/salt/states/scriptsy usando esta test.slsconfiguración ahora está funcionando.

/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

Soy nuevo en salt-ssh y estoy buscando información.aquícon respecto a cómo ejecutar un script que reside en mi cuadro de administración ( /root/bin/updater/scripts/pam-setup-access) en un nodo remoto al que también tengo acceso de root.

Creé un statearchivo (a continuación) pero no estoy seguro de dónde colocarlo. La sal-sshdocumentosSolo lo menciono /etc/salt/master, así que lo busqué peroesos documentosParecen ser específicos para la instalación vagabunda y de paquetes.

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

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

Por último, intenté simplemente ejecutar el archivo de estado desde el directorio actual como se muestra en el primer enlace, pero solo lo molesté. ¿Qué me estoy perdiendo?

# 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

.:: ACTUALIZAR ::.

Necesito usar salt-ssh ya que varios "súbditos" residen en una red separada del maestro (DMZ). Según tengo entendido, la configuración tradicional de Salt requiere que los minions se conecten al Salt Master.

Desde la publicación, instalé salt-ssh desdeel repositorio de saltstackque parece haberse solucionado el msgpackerror anterior. También modifiqué algunos de los ejemplos del enlace específico de vagabundo anterior, agregando un masterarchivo y statesun directorio en /etc/salt. He colocado el archivo de estado (arriba) en /etc/salt/states/test.sls. Los resultados están a continuación.

Agregué guiones bajos entre add scripty run script, como lo sugiere @wirap. Esto me ha llevado más lejos como se muestra a continuación. Parece que hay algún error relacionado con la ruta del script en el cliente o servidor. No estoy seguro todavía. Parece que necesito llamar solo state.applycon el nombre del .slsarchivo (sin la extensión .sls).

/etc/salt/master:

file_roots:
   base:
      - /etc/salt/states

Cuando ejecuto salt-ssh ahora, obtengo:

# 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

Respuesta1

  1. ¿Está seguro de que desea utilizar salt-ssh ("Ejecutar comandos y estados salt a través de ssh sin instalar un salt-minion"). Solo necesitas hacerlo de esta manera si no puedes instalar salt-minion en tus minions
  2. ¿Dónde pusiste tus estados? Normalmente en la configuración /etc/salt/master escribes elruta donde deberían estar sus archivos de estado
  3. No utilice el estado proporcionado en el ejemplo textualmente. Estoy bastante seguro de que no puedes tener un espacio en eldeclaración de identificación( add script:).
  4. Su mensaje de error me es desconocido. este hiloaquíhace la siguiente sugerencia:"El error msgpack es muy engañoso, ya que no tiene ninguna relación. ¿Parece que uno de sus archivos server.conf tiene utf-8 no válido en un minion y el archivo no existe en el otro? "Sospecho firmemente que el espacio ('') en su identificación de estado. En mi experiencia, SaltStack puede generar mensajes de error bastante engañosos si tiene caracteres no válidos en sus archivos de estado o pilar.

Consejos adicionales:

  • Miraraquípara obtener información sobre cómo configurar su árbol de estado.
  • Tal vez use una instalación preinstalada de SaltStack (docker, Vagrant?) que ya funcione para aprender cómo funciona. Dado que UtahDave es bastante activo en SaltStack, elegiría sumanifestación(Descargo de responsabilidad: ¡No lo probé yo mismo!)

Actualizar: Cuando usas file.managed:

  • el parámetro sourcede file.managedes la ruta en su maestro (relativa a su ruta estatal), no el objetivo.
  • necesitas especificar la ruta en el destino, es por eso que recibes el error:"El archivo especificado pam-setup-access no es una ruta absoluta"

Ejemplo:

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

es lo mismo que:

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

Lo mismo ocurre con cmd.run.

Leer elgeneralTutorial de SaltStack. Cuando diseñas estados, no importa si usas salt-ssh o salt. No dejes que esto te confunda.

información relacionada