覆盖厨师的属性

时间:2017-08-24 18:24:36

标签: ruby tomcat chef chef-recipe

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

以下是在依赖食谱TOMCAT中定​​义catalina选项的代码

@RunWith(SpringJUnit4ClassRunner.class)
public class MainClassTest {
  @Spy MainClass;

   @Mock
   private ClassC classc;

   @Before
   public void setup() {
     MockitoAnnotations.initMocks(this);
     PowerMockito.mockStatic(First.class);
   }
   @Test
   public void myTest(){
    when(First.getC()).thenReturn(classc);
    Mockito.doCallRealMethod().when(classc).setStr(Mockito.any(String.class)) 
 }
}

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

 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

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

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

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

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

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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