在 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 事实是否已经提供了您想要的内容。如果没有,那么为此目的编写自定义事实应该很容易。