我还没有遇到将在本地复制/移动文件的Chef资源.例如,我想下载jetty hightide并解压缩它.完成后,将所有文件复制到特定文件夹中,如下所示:
# mv /var/tmp/jetty-hightide-7.4.5.v20110725/* /opt/jetty/
Run Code Online (Sandbox Code Playgroud)
解压后,BTW,jettyhightide会给你一个文件夹,并在文件夹里面放置其余的文件.因此unzip jetty-hightide-7.4.5.v20110725.zip -d /opt/jetty/它是无用的,因为它将创建一个目录,/opt/jetty/jetty-hightide-7.4.5.v20110725/*而我真正想要的是/opt/jetty/*.因此,我正在寻找Chef的本地复制/移动资源.
CAM*_*BAP 103
我使用file语句来复制文件(编译时检查)
file "/etc/init.d/someService" do
owner 'root'
group 'root'
mode 0755
content ::File.open("/home/someService").read
action :create
end
Run Code Online (Sandbox Code Playgroud)
这里 :
"/etc/init.d/someService" - 目标文件, "/home/someService" - 源文件你也可以::File.open("/home/someService").read用lazy块包装
...
lazy { ::File.open("/home/someService").read }
...
Run Code Online (Sandbox Code Playgroud)
用户remote_file声明(运行时检查)
remote_file "Copy service file" do
path "/etc/init.d/someService"
source "file:///home/someService"
owner 'root'
group 'root'
mode 0755
end
Run Code Online (Sandbox Code Playgroud)
您也可以使用shell/batch
Dir[ "/some/directory/resources/**/*" ].each do |curr_path|
file "/some/target/dir/#{Pathname.new(curr_path).basename}" do
owner 'root'
group 'root'
mode 0755
content lazy { IO.read(curr_path, mode: 'rb').read }
action :create
end if File.file?(curr_path)
directory "/some/target/dir/#{File.dirname(curr_path)}" do
path curr_path
owner 'root'
group 'root'
mode 0755
action :create
end if File.directory?(curr_path)
end
Run Code Online (Sandbox Code Playgroud)
这只是一个想法,因为此示例中的子路径未正确处理.
sla*_*fer 13
我通过使用bash资源如下工作:
bash "install_jettyhightide" do
code <<-EOL
unzip /var/tmp/jetty-hightide-7.4.5.v20110725.zip -d /opt/jetty/
mv /opt/jetty/jetty-hightide-7.4.5.v20110725/* /opt/jetty/
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
update-rc.d jetty defaults
EOL
end
Run Code Online (Sandbox Code Playgroud)
但我真的希望厨师这样做.在本地复制/移动文件将是系统管理员需要做的最通用的任务.
Mar*_*reu 13
我知道这个问题已经得到解答和讨论,但这是我在创建文件时使用的方法.
cookbook_file资源例如:
cookbook_file "/server/path/to/file.ext" do
source "filename.ext"
owner "root"
group "root"
mode 00600
action :create_if_missing
end
Run Code Online (Sandbox Code Playgroud)
来自厨师文档:http://docs.opscode.com/resource_cookbook_file.html
cookbook_file资源用于将文件从cookbook中files /目录的子目录传输到位于运行chef-client或chef-solo的主机上的指定路径.