Chef infra 在Chef中链接/分组资源
在我的厨师食谱中,我有很多地方需要按顺序进行操作,并且这些顺序需要在几个地方引用。例如,一个操作序列是停止Tomcat、重新编译应用程序、启动Tomcat,除其他事件外,应用程序源树的更改也会触发该操作序列 我需要能够触发这些操作序列,需要使用来自各种资源的notifies属性,包括:delayed功能,加上序列本身的subscribes属性,因为序列可能由其他配方中的资源触发,如果Tomcat存在,将重新启动Tomcat,但实际上不要依赖于Tomcat的配方 管理这些业务组的最佳方式是什么 从这一点上,我看到一种处理方法是让任何相关事件按顺序通知所有这些操作:Chef infra 在Chef中链接/分组资源,chef-infra,Chef Infra,在我的厨师食谱中,我有很多地方需要按顺序进行操作,并且这些顺序需要在几个地方引用。例如,一个操作序列是停止Tomcat、重新编译应用程序、启动Tomcat,除其他事件外,应用程序源树的更改也会触发该操作序列 我需要能够触发这些操作序列,需要使用来自各种资源的notifies属性,包括:delayed功能,加上序列本身的subscribes属性,因为序列可能由其他配方中的资源触发,如果Tomcat存在,将重新启动Tomcat,但实际上不要依赖于Tomcat的配方 管理这些业务组的最佳方式是什么 从
git 'repo' do
notifies :stop, 'service[tomcat]', :delayed
notifies :run, 'recompile_app', :delayed
notifies :start, 'service[tomcat]', :delayed
end
然而,有相当多的资源可以触发这一系列事件,而且这种级别的代码复制似乎效率低下且容易出错
有没有更好的方法来处理这个问题?听起来你想要一个或一个。LWRPs将围绕资源集合创建一个包装器,因此它在资源集合中只出现一次。这就像是厨师的延伸。定义将包装一系列资源,但每个资源仍存在于资源集合中 在您的示例中,我将使用一个定义:
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
资料来源:
如果您有许多地方有某种代码重复,您应该将其提取到库或LWRP中。对于这些定义,什么是替代使用订阅的合适方法?简单地添加subscribes子句对我来说不起作用。我有一些资源需要调用定义,如果它的烹饪书被包含,或者如果它没有被包含。登录被翻转。你指的是哪个登录?还有,我该如何像我的文章中的参考资料那样延迟调用这个定义呢?我的意思是说逻辑*