Chef:如何在同一配方中创建目录后引用/执行操作

时间:2016-11-03 12:19:03

标签: chef

我需要创建一个目录,然后通过相同的配方将文件复制到新创建的目录(不需要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

2 个答案:

答案 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的东西更有效。