我必须修改 linko cookbook 的 CATALINA OPTIONS。我的问题是 catalina 的属性是由相关 Recipe (tomcat) 设置的。
下面是在依赖的 cookbook TOMCAT 中定义 catalina 选项的代码
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 Recipe 中设置一个覆盖,如下所示: 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 项目时,我在 catalina 的 setenv.sh 文件中获得以下参数:
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
Recipe 未公开,因此我们(贵公司以外的人)无法确切知道它在做什么。但鉴于有 catalina_options1
和 catalina_options2
,我猜 concat 是内部的,可能类似于 CATALINA_OPTS="<%= @catalina_options1 %> <%= @catalina_options2 %>"
在模板文件中。在这种情况下 2
中的内容将始终附加,您不能专门覆盖 1
中的内容因为它首先不是来自节点属性。
关于ruby - 覆盖 Chef 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45868543/