【发布时间】:2014-09-15 22:56:25
【问题描述】:
我想在多台 linux 机器上部署一个配置文件,并且需要确保该配置文件中的某个变量对于每台机器都有唯一的值。到目前为止,我一直通过以下方式发送相同的配置文件:
file {
"/etc/nxserver/node.conf":
mode => 644,
ensure => file,
source => "puppet:///modules/nxserver/nxserver-node.conf";
}
我认为切换到模板就像用 content 替换 source 一样简单:
file {
"/etc/nxserver/node.conf":
mode => 644,
group => root,
content => template("nxserver/nxserver-node.erb"),
}
在nxserver-node.erb 文件中,我可以通过以下方式设置感兴趣的变量:
# This file is managed by puppet
... random config stuff ...
somevariable = <%= hostname %>
我的问题:
- 有没有办法在 erb 文件中处理和提取
<%= hostname %>的一部分?例如。我的主机名可能是“desktop-01234”,我只想使用“01234”位。我将如何实现这一目标? - 或者,我是否可以指定一系列有效值,这些值可以唯一但随机地分配给 erb 文件中的变量?例如。
somevariable可以是表示某个端口号的变量,范围为 1000 - 4000。我需要确保在每个 puppet 主机上,此变量具有不同的值。我将如何实现这一目标?
编辑:我可以使用fqdn_rand(MAX, [SEED]) 为每个主机名生成一个唯一的随机数,但根据文档,它将返回一个random whole number greater than or equal to 0 and less than MAX。
<% Puppet::Parser::Functions.function('fqdn_rand') -%>
<% value = scope.function_fqdn_rand(['10000']) -%>
somevariable=<%= value.to_s %>
我尝试使用+ 和add 添加偏移量,但+ 似乎是为字符串保留的,add 函数未知。
【问题讨论】:
标签: puppet