在 puppet ensure_packages 包定义中使用命令输出
Use command output in puppet ensure_packages package definition
我目前正在使用以下内容从 puppet 清单安装内核头文件:
ensure_packages([
'linux-headers-4.19.0-12-cloud-amd64',
],
{ 'ensure' => 'present' })
如果我可以使用 uname -r
命令而不是对内核版本进行硬编码会更有意义,以便自动检索正在安装它的内核版本实例。
所以我尝试使用以下配置。
ensure_packages([
"linux-headers-$(uname -r)",
],
{ 'ensure' => 'present' })
但这失败了,因为它似乎无法解析命令。
这在 puppet 中甚至可能吗?
Is this even possible in puppet?
是的,可以在目录构建期间 运行 外部命令,捕获输出,并像使用任何其他字符串一样使用它来通知目录的详细信息。您将在 the generate()
function 的帮助下完成这项工作。您可能需要指定命令的显式路径。
但这不是你真正想要的。
如果您在目录构建期间执行评估,那么您将获得与构建目录的机器相关的数据,该机器通常与将应用目录的机器不同。将目标机器详细信息传送给目录构建器的最合适的载体是 facts。您可能想要检查核心(内置)kernel
事实是否已经提供了您想要的内容。如果没有,那么为此目的编写自定义事实应该很容易。
我目前正在使用以下内容从 puppet 清单安装内核头文件:
ensure_packages([
'linux-headers-4.19.0-12-cloud-amd64',
],
{ 'ensure' => 'present' })
如果我可以使用 uname -r
命令而不是对内核版本进行硬编码会更有意义,以便自动检索正在安装它的内核版本实例。
所以我尝试使用以下配置。
ensure_packages([
"linux-headers-$(uname -r)",
],
{ 'ensure' => 'present' })
但这失败了,因为它似乎无法解析命令。
这在 puppet 中甚至可能吗?
Is this even possible in puppet?
是的,可以在目录构建期间 运行 外部命令,捕获输出,并像使用任何其他字符串一样使用它来通知目录的详细信息。您将在 the generate()
function 的帮助下完成这项工作。您可能需要指定命令的显式路径。
但这不是你真正想要的。
如果您在目录构建期间执行评估,那么您将获得与构建目录的机器相关的数据,该机器通常与将应用目录的机器不同。将目标机器详细信息传送给目录构建器的最合适的载体是 facts。您可能想要检查核心(内置)kernel
事实是否已经提供了您想要的内容。如果没有,那么为此目的编写自定义事实应该很容易。