厨师执行块

时间:2014-01-27 14:51:34

标签: ruby chef chef-recipe

我对Chef很新。我有一个安装sendmail的配方,它会完成我的配置。我注意到Chef在每次运行时重新启动服务。那是因为我正在运行调用会话重启的execute

看起来像这样:

execute "hashAccess" do
  command "makemap hash /etc/mail/access < /etc/mail/access"
  notifies :restart, "service[sendmail]"
end

我只有在access文件更新时才需要调用它。

template "/etc/mail/access" do
  source "access.erb"
  mode   "0644"
  notifies :run, "execute[hashAccess]"
end

更新文件后,将execute调用两次。 两个资源都在同一个配方中,当我尝试define hashAccess时出现错误

 ERROR: Cannot find a resource for define on amazon version 2013.09

如何让执行资源仅在被调用时运行?

1 个答案:

答案 0 :(得分:6)

您应该将action :nothing添加到执行资源中。

execute "hashAccess" do
  command "makemap hash /etc/mail/access < /etc/mail/access"
  action :nothing
  notifies :restart, "service[sendmail]"
end

这种方式不会被执行,除非其他资源通知。