在Chef中链接/分组资源

时间:2014-01-14 17:53:16

标签: chef

我的Chef配方中有很多地方需要按顺序运行操作,并且需要在多个地方引用该序列。例如,一系列操作是“停止Tomcat,重新编译应用程序,启动Tomcat”,这可以由“应用程序源树更改”等事件触发。

我需要能够使用来自各种资源的notifies属性(包括:delayed功能)以及序列本身的subscribes属性触发这些操作序列,因为序列可以由其他配方中的资源触发,如果它们存在,它将重新启动Tomcat,但实际上并不依赖于Tomcat配方。

管理这些操作组的最佳方法是什么?

我从the Chef docs看到,处理此问题的方法是让任何相关事件按顺序通知所有这些操作:

git 'repo' do
  notifies :stop, 'service[tomcat]', :delayed
  notifies :run, 'recompile_app', :delayed
  notifies :start, 'service[tomcat]', :delayed
end

但是,这一系列事件可能会触发相当多的资源,并且这种级别的代码重复似乎效率低下且容易出错。

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

听起来你想要LWRPdefinition。 LWRP将围绕资源集合创建一个包装器,因此它只会在资源集合中出现一次。这就像是Chef的延伸。定义将包装一系列资源,但每个资源仍然存在于资源集合中。

在您的示例中,我将使用定义:

define :my_thing do
  git 'repo' do
    # ...
  end

  service 'tomcat' do
    action :stop
  end

  execute 'recompile_app' do
    action :run
  end

  service 'tomcat' do
    action :start
  end
end

来源: