如何检索事实并使用它在 Puppet 的变量中存储自定义值?
How do I retrieve a fact and use it to store a custom value in a variable in Puppet?
我有一个脚本,我从一台机器上检索 IP 地址,然后执行一些逻辑操作来决定为变量赋予什么值。然后,我使用这个值来决定机器工作的环境。
我正在尝试将其翻译成 Puppet,但我不确定如何进行。我知道我可以使用事实检索 IP 地址,但我应该在清单还是模板中执行此操作?另外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作。
总而言之,这些是我需要的步骤。
从机器获取IP地址。
执行逻辑运算。
将带有结果的变量传递给 Puppet 清单。
要点是:如何将事实作为变量检索以及我应该将代码放在哪里以使用该变量?
提前致谢。
您不能使用事实准确 "retrieve" IP,但目录编译器可以并且确实 接收 它作为事实.前者表明目录编译器在此过程中发挥了积极作用,而事实并非如此。
您有两个通用选择:
- 计算节点上的派生值
- 在 master 上计算派生值
您可以通过编写自定义事实来计算节点上的值。它的工作可以通过依赖 Facter 为其提供 IP 来简化。结果将作为自己的独立事实呈现给目录编译器,并且在任何地方使用它都不需要任何特殊的东西。
将派生值作为事实计算的缺点包括这样做的代码被复制到所有节点,在那里它可能被检查,如果一个节点被破坏,那么原则上这个事实的价值可以被欺骗。此外,自定义事实可能需要在 Ruby 中实施,以防这对您来说是个问题。
在目录生成器中执行计算并不是特别困难。您可以将其作为自定义函数来执行,其复杂性与自定义事实相当,但我建议在 class 中执行此操作,并将结果分配给 class 变量 class。具体而言,您应该如何实现值计算取决于该计算的细节。例如,
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 : }
}
我有一个脚本,我从一台机器上检索 IP 地址,然后执行一些逻辑操作来决定为变量赋予什么值。然后,我使用这个值来决定机器工作的环境。
我正在尝试将其翻译成 Puppet,但我不确定如何进行。我知道我可以使用事实检索 IP 地址,但我应该在清单还是模板中执行此操作?另外,我应该在哪里执行逻辑操作。请记住,我将进行字符串操作。
总而言之,这些是我需要的步骤。
从机器获取IP地址。
执行逻辑运算。
将带有结果的变量传递给 Puppet 清单。
要点是:如何将事实作为变量检索以及我应该将代码放在哪里以使用该变量?
提前致谢。
您不能使用事实准确 "retrieve" IP,但目录编译器可以并且确实 接收 它作为事实.前者表明目录编译器在此过程中发挥了积极作用,而事实并非如此。
您有两个通用选择:
- 计算节点上的派生值
- 在 master 上计算派生值
您可以通过编写自定义事实来计算节点上的值。它的工作可以通过依赖 Facter 为其提供 IP 来简化。结果将作为自己的独立事实呈现给目录编译器,并且在任何地方使用它都不需要任何特殊的东西。
将派生值作为事实计算的缺点包括这样做的代码被复制到所有节点,在那里它可能被检查,如果一个节点被破坏,那么原则上这个事实的价值可以被欺骗。此外,自定义事实可能需要在 Ruby 中实施,以防这对您来说是个问题。
在目录生成器中执行计算并不是特别困难。您可以将其作为自定义函数来执行,其复杂性与自定义事实相当,但我建议在 class 中执行此操作,并将结果分配给 class 变量 class。具体而言,您应该如何实现值计算取决于该计算的细节。例如,
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 : }
}