如何检索事实并使用它在Puppet中的变量中存储自定义值?

时间:2016-08-03 14:07:34

标签: puppet facter

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

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

总结一下,这些是我需要的步骤。

  1. 从机器上获取IP地址。

  2. 执行逻辑操作。

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

  4. 重点是:如何将事实作为变量检索,我应该将代码放在何处使用该变量?

    提前致谢。

1 个答案:

答案 0 :(得分:2)

你不能完全"检索" 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 : }
}