【问题标题】:How do I retrieve a fact and use it to store a custom value in a variable in Puppet?如何检索事实并使用它将自定义值存储在 Puppet 的变量中?
【发布时间】:2016-08-03 14:07:34
【问题描述】:

我有一个脚本,我从机器中检索 IP 地址,然后执行一些逻辑操作来决定赋予变量什么值。然后,我使用这个值来对机器工作的环境做出一些决定。

我正在尝试将其翻译为 Puppet,但我不确定如何继续。我知道我可以使用事实检索 IP 地址,但我应该在清单还是模板中执行此操作?另外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作。

总而言之,这些是我需要的步骤。

  1. 从机器获取 IP 地址。

  2. 执行逻辑运算。

  3. 将带有结果的变量传递给 Puppet 清单。

重点是:如何将事实作为变量检索,我应该将代码放在哪里来处理该变量?

提前致谢。

【问题讨论】:

  • 这很模糊。您应该详细说明第 2 点和第 3 点,以便人们可以帮助您。
  • 能否提供脚本示例?
  • 我认为操作不是这里的重要部分。我将进行简单的字符串操作并检查某些条件是否成立。关键是我如何检索事实以使用它以及我应该将代码放在哪里?我要编辑这个问题。

标签: puppet facter


【解决方案1】:

您无法使用事实准确地“检索”IP,但目录编译器可以并且确实将其作为事实接收。前者表明目录编译器在这个过程中扮演着积极的角色,而事实并非如此。

您有两种通用选择:

  • 计算节点上的派生值
  • 在主节​​点上计算派生值

您可以通过编写自定义事实来计算节点上的值。它的工作可以通过依靠 Facter 为其提供 IP 来简化。结果将作为它自己的、独立的事实呈现给目录编译器,并且在任何地方都不需要任何特殊的东西。

将派生值计算为事实的不利方面包括这样做的代码被复制到所有节点,在那里它可能会被检查,如果一个节点被破坏,那么原则上这个事实的值可以是欺骗。此外,自定义事实可能需要在 Ruby 中实现,以防您遇到问题。

在目录生成器中执行计算并不是特别难。您可以将其作为自定义函数执行,其复杂性与自定义事实相当,但我建议在类中执行此操作,并将结果分配给该类的类变量。具体而言,您应该如何实现值计算取决于该计算的细节。例如,

class site::derived_data {
    $ip_pieces = split($ipaddress, '[.]')

    # This is the derived value we are computing:
    $department = $ip_pieces[2] ? {
        0 => 'network operations',

        # ...

        default => 'other'
    }
}

然后你可以像这样在其他地方使用它:

class mymodule::myclass(
    # parameters ...
    ) {
  include site::derived_data

  notify { $site::derived_data::department : }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2011-02-11
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多