Chef 食谱 - 如何在属性文件中动态获取主机名

问题描述 投票:0回答:2

我需要在 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

但这没有用。

chef-infra cookbook
2个回答
0
投票

这是通过覆盖 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)”解决了这个问题。


0
投票

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"
© www.soinside.com 2019 - 2024. All rights reserved.