我需要创建一个目录,然后通过相同的配方将文件复制到新创建的目录(不需要2个配方 - 1个用于创建,另一个用于复制)。但是当我这样做时,需要复制文件的配方的第二部分是失败的给出错误消息:目录不存在。 从错误中得出结论,它在编译期间失败,因为目录不存在,因为它将在第一步中创建 请指教
dir="/ibmlib"
directory '/ibmlib' do
owner 'root'
group 'root'
mode '0777'
action :create
end
li = 'add file'
clrlog1 = Chef::Util::FileEdit.new('/ibmlib')
clrlog1.insert_line_if_no_match(/#{li}/, li)
clrlog1.write_file
答案 0 :(得分:1)
假设您将目录路径存储为属性,例如:
directory node['attribute']['new_path'] do
recursive true
end
execute 'copy' do
command "cp #{node['attribute']['old_path']}/* #{node['attribute']['new_path']}/."
end
请记住,调用资源的顺序在这里至关重要,因此如果您有其他资源通知这些,请在请求执行时关注订单(例如执行延迟执行)。< / p>
为了确保订单你也可以试试这个:
directory node['attribute']['new_path'] do
recursive true
notifies :run, 'execute[copy]', :immediate
end
execute 'copy' do
command "cp #{node['attribute']['old_path']}/* #{node['attribute']['new_path']}/."
action :nothing
end
答案 1 :(得分:0)
如评论中所述,您应该避免在线文件编辑,因为它会导致脆弱的配方代码。如果你必须这样做,请使用<style>
.red {
color: #f00;
}
</style>
<template>
<h1 class="red">{{msg}}</h1>
</template>
<script>
export default {
data () {
return {
msg: 'Hello world!'
}
}
}
</script>
cookbook,因为它提供了所展示代码的面向资源的版本,这对于Chef-y的东西更有效。