覆盖厨师的属性

Overriding attributes in chef

我必须修改linko cookbook 的CATALINA OPTIONS。我的问题是 catalina 的属性是由相关食谱 (tomcat) 设置的。

这里是在相关说明书中定义 catalina 选项的代码 TOMCAT

 catalina_options   = Array.new
          catalina_options  << "-XX:+UseConcMarkSweepGC"
          catalina_options  << "-Xms#{new_resource.jvm_min_size}"
          catalina_options  << "-Xmx#{new_resource.jvm_max_size}"
          catalina_options  << "-XX:PermSize=#{new_resource.jvm_permsize}"
          catalina_options  << "-XX:MaxPermSize=#{new_resource.jvm_max_permsize}"

    template "#{new_resource.home}/bin/setenv.sh" do
            cookbook "ypg_tomcat"
            source "setenv.sh.erb"
            owner new_resource.user
            group new_resource.group
            variables({
               :java_home         => "/usr/lib/jvm/default-java",
               :java_options      => "#{java_options.join(' ')} #{new_resource.java_options}",
               :catalina_options1 => "#{catalina_options.join(' ')}",
               :catalina_options2 => "#{new_resource.catalina_options}",
               :classpath         => new_resource.classpath,
               :catalina_home     => "#{node[:ypg_tomcat][:home]}",
               :gc_opts           => "#{java_options.join(' ')} #{new_resource.gc_opts}",
               :solr_opts         => new_resource.solr_opts,
               :dcosp_running_env => new_resource.dcosp_running_env
            })
            notifies :restart, "service[#{new_resource.service_name}]"
          end

所以我尝试在我的 linko 食谱中设置覆盖,如下所示: master.rb 文件的内容:

if node[:yp_linko][:overwrite_gc]
  node.override['yp_linko']['catalina_options'] = node['yp_linko']['overwrite_gc']
end

并且在我的属性文件 (default.rb) 中添加了我想要的参数:

default['yp_linko']['overwrite_gc'] = '-XX:+UseParallelGC -XX:+UseParallelOldGC'

现在,当我 运行 我的 teamcity 项目时,我在我的 setenv.sh catalina 文件中得到以下参数:

CATALINA_OPTS="-XX:+UseConcMarkSweepGC -Xms12G -Xmx16G -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+DEFAULTRBOVERWRITE -javaagent:/var/lib/newrelic/tomcat/newrelic.jar

所以不知何故它仍然保留默认值并在最后添加我自己的参数而不是覆盖它们。

在此先感谢您的帮助。

ypg_tomcat 食谱不是 public,所以我们(贵公司以外的人)无法确切知道它在做什么。但是鉴于有 catalina_options1catalina_options2,我猜 concat 是内部的,可能类似于模板文件中的 CATALINA_OPTS="<%= @catalina_options1 %> <%= @catalina_options2 %>"。在这种情况下,2 中的内容将始终被附加,您不能专门覆盖 1 中的内容,因为它首先不是来自节点属性。