我需要在 5 个不同的服务器上创建 10 个 tomcat 实例(每个服务器上有 2 个实例)。实例名称在 5 个服务器中是通用的。
Tomcat 实例需要与监控工具 AppD 集成。现在,在集成它时需要在属性文件中添加一个参数,如下所述:
default['mw']['tomcat'][application_identifier]['java_opts'] = '$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Dappd.agent.nodeName=<HostName>-instance_tc_primary
这里的要求是不要硬编码;而根据要部署它的主机动态放置它。
例如
对于主机 LDN001,它应显示为:
default['mw']['tomcat'][application_identifier]['java_opts'] = '$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Dappd.agent.nodeName=LDN001-instance_tc_primary
对于主机 LDN002,它应显示为 -
default['mw']['tomcat'][application_identifier]['java_opts'] = '$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Dappd.agent.nodeName=LDN002-instance_tc_primary
那么我怎样才能让属性文件根据要部署的主机动态获取主机名呢?
我们尝试更改角色文件,如下所示,认为它将覆盖 java_opts:
node.override['mw']['tomcat'][application_identifier]['java_opts'] =
"$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Djava.awt.headless=true $JAVA_SYSTYPE_OPTS -Dappdynamics.agent.nodeName=#{host[hostname]}-instance_tc_primary
但这没有用。
这是通过覆盖 Receipe 文件来完成的,如下所示: node.override['mw']['tomcat'][application_identifier]['java_opts'] = '$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Djava.awt.headless=true $JAVA_SYSTYPE_OPTS -Dappdynamics.agent.nodeName=$(hostname -s)-instance_tc_prim
所以使用“$(hostname -s)”解决了这个问题。
Chef Ohai 收集有关运行 chef-client 的系统的综合信息。我们可以使用它来动态获取主机信息并替换所需的值。
例如,节点的主机名在
node['hostname']
属性中可用。
所以,像下面这样的简单属性定义就足够了:
default['mw']['tomcat'][application_identifier]['java_opts'] = "$JAVA_HEAP $JAVA_PROPS_SYSTYPE -Dappd.agent.nodeName=#{node['hostname'])-instance_tc_primary"