【问题标题】:puppet, set template variable based on hostname value or unique random valuepuppet,根据主机名值或唯一随机值设置模板变量
【发布时间】: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 文件中处理和提取 &lt;%= hostname %&gt; 的一部分?例如。我的主机名可能是“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


    【解决方案1】:

    以下正是我需要的:

    <% Puppet::Parser::Functions.function('fqdn_rand') -%>
    <% offset = "1000".to_i -%>
    <% value = scope.function_fqdn_rand(['10000']).to_i + offset -%>
    somevariable=<%= value.to_s %>
    

    【讨论】:

    • 这不是说somevariable=&lt;%= scope.function_fqdn_rand(['10000']).to_i + 1000 %&gt;的精巧方式吗?
    • 是的,但您会收到以下错误“详细信息:无法将 Fixnum 转换为字符串”。上述解决方案有效。
    • 对,忘了你最后的to_s :-) 第一行应该可以安全跳过。
    • 不幸的是,这还不够。 + 1000 实际上是导致问题的原因,我的猜测是 ruby​​ 将 + 解释为必须连接两个字符串。因此,偏移量和值都需要显式转换为带有to_i 的整数。只有在最后你做一个to_s
    【解决方案2】:

    在 ERB 模板中,您可以做任何 Ruby 可以做的事情。 String 方法特别有用。

    例如,要从您的主机名中删除前缀,您可以使用

    somevariable = <%= @hostname.sub(/^desktop-/, '') %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2021-04-07
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多