将文件从Chef客户端节点复制到工作站

我想知道如何将文件从客户端节点传输到远程计算机。 我已经检查过是否有可用的资源。 我发现最接近的是remote_file ,但它从远程位置获取文件并将其传输到客户端节点。

所以我通过编写一个执行自动scp的bash脚本尝试了另一个选项。 但我无法复制该文件,但厨师 – 客户端运行良好,没有显示任何错误。

这是我复制文件的脚本:

 #!/usr/bin/expect -f # connect via scp spawn scp "/tmp/testfile" chef-ws@10.232.110.113:/home/chef-ws/fileserver expect { -re ".*es.*o.*" { exp_send "yes\r" exp_continue } -re ".*sword.*" { exp_send "password\r" } } interact 

我已将此脚本复制到cookbook's templates目录中,作为automatecopy.erb ,然后在default.rb ,我有以下代码

 template "/tmp/automatecopy" do source "automatecopy.erb" mode 0777 end execute "automatecopy" do command "/usr/bin/expect /tmp/automatecopy" timeout 100 action :run end 

这里,chef-client运行成功,但文件未复制到我的工作站机器。 还有一件事是,当我登录到我的客户端节点并从那里运行脚本时,它正在工作。 那么为什么厨师失败呢?

请帮我解决这个问题,建议可能有什么问题,或者是否有可用于将文件从客户端复制到工作站的内置主厨资源。

PS:我的工作站和客户端节点都运行Ubuntu 12.04。 提前致谢。

我找到了解决方案。感谢这个SOpost类似于我的需要,在那里我找到了sshpass的用法而不是expect 。 所以我改变了我的脚本,如下所示,现在厨师很开心,它的复制…… 🙂

使用sshpass修改脚本

 #!/bin/bash #Copy file from client's source path to workstation's dest path sshpass -p <%= @password%> scp -o StrictHostKeyChecking=no <%= @sourcefile%> <%= @user%>@<%= @ip%>:<%= @destinationpath%> 

在default.rb中

 template "/tmp/automatecopy" do source "automatecopy.erb" mode 0777 variables( :user=> "chef-ws", :ip=> "10.232.110.113", :sourcefile=> "/tmp/outfile", :destinationpath => "/home/chef-ws/fileserver", :password=> "pass" ) end 
Interesting Posts