我想在几台Linux机器上部署配置文件,并且需要确保该配置文件中的某个变量对每台机器都有唯一的值。到目前为止,我已经通过以下方式发送了相同的配置文件:
file {
"/etc/nxserver/node.conf":
mode => 644,
ensure => file,
source => "puppet:///modules/nxserver/nxserver-node.conf";
}
我认为切换到模板就像用source
替换content
一样简单:
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 %>
我的问题:
<%= hostname %>
的部分内容?例如。我的主机名可能是&#34; desktop-01234&#34;,我想使用&#34; 01234&#34;只有一点。我怎么做到这一点?somevariable
可以是表示某个端口号的变量,范围为1000 - 4000.我需要确保在每个木偶主机上此变量具有不同的值。我怎么做到这一点? 编辑:我可以使用
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
函数未知。
答案 0 :(得分:0)
以下完全符合我的要求:
<% Puppet::Parser::Functions.function('fqdn_rand') -%>
<% offset = "1000".to_i -%>
<% value = scope.function_fqdn_rand(['10000']).to_i + offset -%>
somevariable=<%= value.to_s %>
答案 1 :(得分:0)
在ERB模板中,您可以完成Ruby所能做的一切。 String方法特别有用。
例如,要从主机名中删除前缀,可以使用
somevariable = <%= @hostname.sub(/^desktop-/, '') %>