Como posso fazer com que o salt-ssh execute um script local em um nó remoto?

Como posso fazer com que o salt-ssh execute um script local em um nó remoto?

.::ATUALIZAÇÃO RESOLVIDA::.

Com o formulário de atendimento obrigatório @wirap, já está funcionando. Eu criei um link simbólico para o diretório do script /etc/salt/states/scriptse usando esta test.slsconfiguração agora 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

Eu sou novo no salt-ssh e estou olhando algumas informaçõesaquisobre como executar um script que reside na minha caixa de administração ( /root/bin/updater/scripts/pam-setup-access) em um nó remoto ao qual também tenho acesso root.

Criei um statearquivo (abaixo), mas não sei onde colocá-lo. O sal-sshdocumentosapenas mencionei /etc/salt/master, então eu pesquisei isso, masaqueles documentosparece ser específico para instalação de pacotes e vagrant.

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, tentei simplesmente executar o arquivo de estado do diretório atual, conforme mostrado no primeiro link, mas só o irritei. o que estou perdendo?

# 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

.:: ATUALIZAR ::.

Preciso usar salt-ssh porque vários "minions" residem em uma rede separada do mestre (DMZ). Pelo que entendi, a configuração tradicional do sal exige que os minions se conectem ao mestre do sal.

Desde a postagem, instalei o salt-ssh deo repositório saltstackque parece ter se livrado do msgpackerro acima. Também modifiquei alguns dos exemplos do link específico do vagrant acima, adicionando um masterarquivo e statesum diretório em /etc/salt. Coloquei o arquivo de estado (acima) em /etc/salt/states/test.sls. Os resultados estão abaixo.

Adicionei sublinhados entre add scripte run script, conforme sugerido por @wirap. Isso me levou mais longe, conforme mostrado abaixo. Parece que há algum erro envolvendo o caminho do script no cliente ou servidor. Ainda não tenho certeza. Parece que preciso chamar apenas state.applycom o nome do .slsarquivo (sem a extensão .sls).

/etc/salt/master:

file_roots:
   base:
      - /etc/salt/states

Quando inicio o salt-ssh agora, recebo:

# 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

Responder1

  1. Tem certeza de que deseja usar salt-ssh ("Executar comandos e estados salt sobre ssh sem instalar um salt-minion."). Você só precisa fazer isso desta forma se não conseguir instalar o salt-minion em seus minions
  2. Onde você colocou seus estados? Normalmente na configuração /etc/salt/master você escreve ocaminho onde seus arquivos de estado devem estar
  3. Não use o estado fornecido no exemplo literalmente. Tenho certeza que você não pode ter um espaço nodeclaração de identificação( add script:).
  4. Sua mensagem de erro é desconhecida para mim. Este tópicoaquifaz a seguinte sugestão:"O erro msgpack é muito enganoso, pois não tem nenhuma relação. Parece que um dos seus arquivos server.conf tem utf-8 inválido em um minion e o arquivo não existe no outro?"Eu suspeito fortemente do espaço (' ') no seu ID de estado. Na minha experiência, o SaltStack pode emitir mensagens de erro bastante enganosas se você tiver caracteres inválidos em seus arquivos de estado ou pilar.

Dicas extras:

  • Olharaquipara obter informações sobre como configurar sua árvore de estado.
  • Talvez use uma instalação pré-instalada do SaltStack (docker, Vagrant?) Que já funcione para aprender como funciona. Como UtahDave é bastante ativo no SaltStack, eu escolheria seudemonstração(Isenção de responsabilidade: não testei isso sozinho!)

Atualizar: Quando você usa arquivo.gerenciado:

  • o parâmetro sourceé file.managedo caminho do seu mestre (em relação ao caminho do seu estado), não o destino.
  • você precisa especificar o caminho no destino, é por isso que está recebendo o erro:"O arquivo especificado pam-setup-access não é um caminho absoluto"

Exemplo:

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

é o mesmo 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

O mesmo vale para cmd.run.

Leia oem geralTutorial do SaltStack. Quando você projeta estados, não importa se você usa salt-ssh ou salt. Não deixe isso confundir você.

informação relacionada