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



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

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

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

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

  2. 执行逻辑操作。

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

要点是:如何将事实作为变量检索,以及应该将代码放在哪里以使用该变量?

提前谢谢。

您不能使用事实来准确地"检索"IP,但目录编译器可以并且确实将其作为事实来接收。前者表明目录编译器在这个过程中起着积极的作用,而事实并非如此。

你有两个通用的替代方案:

  • 计算节点上的派生值
  • 计算master上的派生值

您可以通过编写自定义事实来计算节点上的值。它的工作可以通过依靠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 : }
}

相关内容

  • 没有找到相关文章

最新更新