2017-09-21 6 views
0

シェフを使用してリモートSSHコマンドを実行するにはどうすればいいですか?例えば、executeリソースシェフ実行中のリモートSSHコマンド

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

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

結果を用いてレシピ

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

に次のコマンドをもたらす私は、しかし、ENDSSHbashを使用して試していません。 EOTを使用すると、bashリソースを使用しているときに外側のEOHと競合しているようです。これはシェフを使用して可能でしょうか、またはMixlib::ShellOutの行に沿った何かが、私が想定しているHEREDOCを使用しているときシェフによって追加されたりインデントされたりするのに適していますか?どちらの場合でも、安定性は疑わしいようです。

ありがとうございます!

+1

何をしようとしていますか?これは他のツールと比較してChefを使用するのに適しているとは言えません。 – coderanger

+0

私は実際にFreeBSDを実行しているインスタンスの設定をリモートで復元しようとしていますが、コンプライアンスの必要性からこの特定のノードにchef-clientをインストールすることはできません。 – dcd018

+2

私のポストヒストリーから見ることができるように、私はかなりシェフのブースターですが、このようなものについては別の場所で見ていきます。ソルト(塩/ ssh)、アネシブル、ファブリック/インボークは、よりフィット感がよく、痛みが少なくなります。 – coderanger

答えて

1

私は@coderangerがコメント(「あなたはほとんどシェフとこれをやってはいけないはずです」)の中で最高の答えを持っていると思いますが、完全性のために、あなたの文字列の改行が正しくエスケープ。次のようなものを試してみてください:

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

ありがとう@jayhendren、これはうまく働いていて、私は同意します。もしstdoutや終了コードが検査して実行を続ける必要があるなら、これは非常に良いアプローチではないかもしれません。私の状況では、単にconfigファイルをscpして、いくつかのreloadコマンドを発行するだけでした。私は、実行されているコマンドが残りのレシピに対してある程度自律的である場合、これは使用することが許容されると主張します。 – dcd018

関連する問題