
.::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/scripts
e usando esta test.sls
configuraçã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 state
arquivo (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 msgpack
erro acima. Também modifiquei alguns dos exemplos do link específico do vagrant acima, adicionando um master
arquivo e states
um 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 script
e 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.apply
com o nome do .sls
arquivo (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
- 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
- Onde você colocou seus estados? Normalmente na configuração /etc/salt/master você escreve ocaminho onde seus arquivos de estado devem estar
- 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:
). - 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.managed
o 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ê.