从人偶清单中的 yaml 中获取变量

Fetch variable from yaml in puppet manifest

我正在为 puppet 做一个项目,但是目前停留在一种逻辑中。

因此,想知道我们能否从 .yaml、.json 或 puppet 清单文件中的纯文本文件中获取变量。

例如, 我的人偶清单想要创建用户,但变量存在于 .yaml 或任何配置文件中,因此需要从外部文件中获取变量。如果 .yaml 文件中存在多个用户,puppet 清单也可以循环。

我读到了关于 hiera 的内容,但假设我们没有使用 hiera,有没有可能的方法。

您可以通过多种方式结合使用内置函数和 stdlib 函数来执行此操作,至少对于 YAML 和 JSON。

  • 使用内置 file 函数和 parseyamlparsejson stdlib 函数:

在 mymodule/files/myfile.yaml:

创建一个文件
▶ cat files/myfile.yaml 
---
foo: bar

然后在你的清单中将它读入一个字符串并解析它:

$myhash = parseyaml(file('mymodule/myfile.yaml'))
notice($myhash)

那将输出:

Notice: Scope(Class[mymodule]): {foo => bar}
  • 或者,使用 loadyamlloadjson stdlib 函数:
$myhash = loadyaml('/etc/puppet/data/myfile.yaml')
notice($myhash)

该方法的问题是您需要知道 Puppet master 上文件的路径。或者,您可以使用 Puppet 6 deferred 函数并从代理节点上的文件中读取数据。

(您 是否应该 这样做完全是另一回事 - 提示:答案是您几乎肯定应该使用 Hiera - 但这不是您问的问题。 )