ruby - 覆盖 Chef 的属性

标签 ruby tomcat chef-infra chef-recipe

我必须修改 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_options1catalina_options2 ,我猜 concat 是内部的,可能类似于 CATALINA_OPTS="<%= @catalina_options1 %> <%= @catalina_options2 %>"在模板文件中。在这种情况下 2 中的内容将始终附加,您不能专门覆盖 1 中的内容因为它首先不是来自节点属性。

关于ruby - 覆盖 Chef 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45868543/

相关文章:

ruby - ruby 数组中的空间按 %w

ruby - 在 markdown 文件中编辑 YAML Frontmatter

jakarta-ee - 旧的 Servlet 内容在 html 中保持不变

tomcat - 我的自定义 tomcat 阀未被拦截

chef-infra - 如何使用综合安装程序安装 Chef Knife 插件/gem?

metadata - 升级到 12.0.0 后,chef-solo 运行时出现元数据错误

ruby - 如何从 URL 读取图像元数据?

ruby - 数组中的 `includes?` 可能无法分配

java - Hibernate 查询语法异常 : Not Mapped

ruby - 获取每个 Chef 服务器节点的特定 IP 地址