我有一个脚本,从机器中检索IP地址,然后执行一些逻辑操作来决定给变量什么值。然后,我使用这个值来对机器工作的环境做出一些决定
我正试图把这个翻译成Puppet,但我不确定如何继续。我知道我可以使用事实检索IP地址,但我应该在清单或模板中这样做吗?此外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作。
总之,这些是我需要的步骤。
-
从机器中获取IP地址。
-
执行逻辑操作。
-
将带有结果的变量传递给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 : }
}