我正在尝试使用Windows共享来复制文件。它在windows中运行良好,因为当我使用它时它会出错。
remote_file 'download' do
source 'file:////server/repo/client.zip'
path "/etc/chef/client.zip"
end
错误日志
Errno :: ENOENT ------------- 没有这样的文件或目录@ rb_sysopen - /server/repo/client.zip
Resource Declaration: ---------------------
# In 52: remote_file 'download' do
53: source 'file:////server/repo/client.zip'
54: path "/etc/chef/client.zip"
56: end
57: #end
答案 0 :(得分:1)
这在UNC路径上完全有效的事实是偶然的(尽管任何人都采取错误的方式,它不会被移除AFAIK)。 Linux没有类似的模式。您可以使用execute
资源和cp
来涵盖基本用例。
execute 'cp /from /to' do
creates '/to'
end
答案 1 :(得分:0)
你可以尝试:
remote_file 'download' do
source '\\server\repo\client.zip'
path "/etc/chef/client.zip"
end
remote_file资源通过Chef::Provider::RemoteFile::NetworkFile
类支持Windows网络路径(如果有人想在源代码中挖掘更多信息)。
remote_file下的调度程序关闭了前导的双重回扫'\\',因此这些字符必须是回溯而不是正斜杠。另请注意,我使用的是单引号而不是双引号 - 如果使用双引号(用于插值或只是样式),则需要自行转义回溯,它变为source "\\\\server\\repo\\client.zip"
。我相当确定ruby本身会容忍其余的后备线被改为正斜线(所以source '\\server/repo/client.zip'
可能是合法的吗?),但这看起来很尴尬。