Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 在Chef中链接/分组资源_Chef Infra - Fatal编程技术网

Chef infra 在Chef中链接/分组资源

Chef infra 在Chef中链接/分组资源,chef-infra,Chef Infra,在我的厨师食谱中,我有很多地方需要按顺序进行操作,并且这些顺序需要在几个地方引用。例如,一个操作序列是停止Tomcat、重新编译应用程序、启动Tomcat,除其他事件外,应用程序源树的更改也会触发该操作序列 我需要能够触发这些操作序列,需要使用来自各种资源的notifies属性,包括:delayed功能,加上序列本身的subscribes属性,因为序列可能由其他配方中的资源触发,如果Tomcat存在,将重新启动Tomcat,但实际上不要依赖于Tomcat的配方 管理这些业务组的最佳方式是什么 从

在我的厨师食谱中,我有很多地方需要按顺序进行操作,并且这些顺序需要在几个地方引用。例如,一个操作序列是停止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子句对我来说不起作用。我有一些资源需要调用定义,如果它的烹饪书被包含,或者如果它没有被包含。登录被翻转。你指的是哪个登录?还有,我该如何像我的文章中的参考资料那样延迟调用这个定义呢?我的意思是说逻辑*