我必须修改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'
所以不知何故它仍保留默认值并在最后添加我自己的参数而不是过度使用它们。
提前感谢您的帮助。
答案 0 :(得分:2)
ypg_tomcat
食谱不公开,所以我们(贵公司外)无法准确知道它在做什么。但鉴于存在catalina_options1
和catalina_options2
,我猜测concat是内部的,可能类似于模板文件中的CATALINA_OPTS="<%= @catalina_options1 %> <%= @catalina_options2 %>"
。在这种情况下,2
中的内容将始终只是附加,您无法专门覆盖1
中的内容,因为它首先不是来自节点属性。