2017-09-21 8 views
0

Comment utiliser les commandes SSH distantes avec Chef? Par exemple, ce qui porte la commande suivante dans une recetteChef - exécution des commandes SSH distantes

ssh -T [email protected] <<'ENDSSH' 
cat /etc/*-release 
ENDSSH 

Utilisation de la ressource execute

execute "some_resource" do 
    command "ssh -T [email protected] <<'ENDSSH' 
    cat /etc/*-release 
    ENDSSH" 
    action :run 
end 

Résultats dans

warning: here-document at line 0 delimited by end-of-file (wanted `ENDSSH') 

Je ne l'ai pas essayé d'utiliser bash avec ENDSSH, cependant. L'utilisation de EOT semble entrer en conflit avec le EOH externe attendu lors de l'utilisation de la ressource bash. Serait-ce possible en utilisant Chef, ou quelque chose comme le Mixlib::ShellOut serait plus approprié pour contourner les indentations ajoutées ou analysées par le Chef lors de l'utilisation de HEREDOC que je suppose être la cause? Dans les deux cas, la stabilité semble discutable.

Merci!

+1

Qu'est-ce que vous essayez de faire? Ce n'est pas un bon endroit pour utiliser Chef par rapport à d'autres outils. – coderanger

+0

Je suis en train d'essayer de restaurer à distance une configuration sur une instance exécutant FreeBSD et en raison des besoins de conformité, chef-client ne peut pas être installé sur ce nœud particulier. – dcd018

+2

Comme vous pouvez probablement le voir à partir de mon histoire de poste, je suis plutôt un booster de chef, mais pour quelque chose comme ça, je chercherais ailleurs. Sel (w/salt-ssh), Ansible, ou tissu/Invoke serait un meilleur ajustement et beaucoup moins douloureux pour vous. – coderanger

Répondre

1

Je pense que @coderanger a la meilleure réponse dans les commentaires ("vous ne devriez certainement pas faire cela avec Chef"), mais par souci d'exhaustivité, je crois que les nouvelles lignes de votre chaîne ne sont pas correctement échappé. Essayez quelque chose comme ceci:

execute "some_resource" do 
    command <<-HEREDOC 
    ssh -T [email protected] <<\'ENDSSH\' 
     cat /etc/*-release 
    ENDSSH 
    HEREDOC 
end 
+0

Merci @jayhendren, cela fonctionne et je suis d'accord, si les codes de sortie et/ou de sortie sont nécessaires pour inspecter et continuer une course, ce n'est peut-être pas une très bonne approche. Dans ma situation, j'ai simplement besoin de scp un fichier de configuration et d'émettre quelques commandes de rechargement. Je dirais que si les commandes en cours d'exécution sont plus ou moins autonomes pour le reste de la recette, cela est acceptable à utiliser. – dcd018