Como posso obter o salt-ssh para executar um script local em um nó remoto?

1

. :: ATUALIZADO EM ATUALIZAÇÕES ::.

Com o formulário de ajuda must @wirap, agora está funcionando. Eu criei um link simbólico para o diretório de script em /etc/salt/states/scripts e usando essa configuração de test.sls 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

Sou novo no salt-ssh e vejo algumas informações aqui sobre como executar um script que reside na minha caixa de administração ( /root/bin/updater/scripts/pam-setup-access ) em um nó remoto que também tenho acesso root.

Eu criei um arquivo state (abaixo), mas não sei onde colocá-lo. Os docs do sal só mencionam /etc/salt/master , então eu procurei, mas dados documentos parecem ser específicos para a instalação de vagabundos e pacotes.

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 fim, tentei simplesmente executar o arquivo de estado a partir do diretório atual, como mostrado no primeiro link, mas só o aborreci. 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

. :: UPDATE ::.

Eu preciso usar o salt-ssh como vários "minions" residem em uma rede separada do mestre (DMZ). Pelo que entendi, a configuração de sal tradicional requer minions para se conectar ao mestre de sal.

Desde a publicação, eu instalei o salt-ssh do repositório do saltstack que parece ter se livrado do msgpack de erro acima. Também modifiquei alguns dos exemplos do link específico do vagrant acima, adicionando um arquivo master e states em /etc/salt . Coloquei o arquivo de estado (acima) em /etc/salt/states/test.sls . Os resultados estão abaixo.

Adicionei sublinhados entre add script e run script , como sugerido por @wirap. Isso me ajudou ainda mais conforme mostrado abaixo. Parece que há algum erro envolvendo o caminho do script no cliente ou no servidor. Ainda não tenho certeza. Parece que preciso chamar state.apply com o nome do arquivo .sls (sem a extensão .sls).

/ etc / salt / master:

file_roots:
   base:
      - /etc/salt/states

Quando eu lanço o sal-ssh agora, eu 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
    
por Server Fault 14.12.2017 / 16:50

1 resposta

2
  1. Tem certeza de que deseja usar salt-ssh ("Execute salt commands e states over ssh sem instalar um salt-minion."). Você só precisa fazer isso se não puder instalar o minion salgado em seus minions
  2. Onde você colocou seus estados? Normalmente, na configuração / etc / salt / master, você escreve o caminho onde seus arquivos de estado devem estar
  3. Não use o estado fornecido no exemplo literalmente. Tenho certeza de que você não pode ter um espaço no declaração de id ( add script: ).
  4. Sua mensagem de erro é desconhecida para mim. Este tópico aqui faz a seguinte sugestão: "O erro msgpack é muito enganador, já que é totalmente não relacionado Parece que um dos seus arquivos server.conf tem utf-8 inválido em um lacaio e o arquivo não existe no outro? " Eu suspeito strongmente, o espaço ('') em seu ID de estado. Na minha experiência, SaltStack pode cuspir mensagens de erro bastante enganosas se você tiver caracteres inválidos em seus arquivos de estado ou pilar.

Dicas extras:

  • Procure aqui para obter informações sobre como configurar sua árvore de estados.
  • Talvez use uma instalação pré-instalada do SaltStack (docker, Vagrant?) que já funciona para aprender como funciona. Como o UtahDave é bastante ativo no SaltStack, eu iria com sua demonstração (Aviso: não testei isso sozinho!)

Atualizar : quando você usa file.managed:

  • o parâmetro source de file.managed é o caminho no seu mestre (relativo ao seu caminho de estado), não o destino.
  • você precisa especificar o caminho no destino, é por isso que está obtendo 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

link

O mesmo vale para cmd.run.

Leia o tutorial geral SaltStack. Quando você projeta estados, não importa se você usa sal-ssh ou sal. Não deixe que isso te confunda.

    
por 14.12.2017 / 18:02