从puppet清单中的yaml获取变量

从puppet清单中的yaml获取变量,yaml,puppet,manifest,puppet-enterprise,Yaml,Puppet,Manifest,Puppet Enterprise,我正在为puppet做一个项目,但目前只停留在一个逻辑上 所以,我们想知道我们可以从puppet清单文件中的.yaml、.json或纯文本文件中获取变量吗 比如说,, 我的puppet清单想要创建用户,但变量存在于.yaml或任何配置文件中,因此需要从外部文件获取变量。如果.yaml文件中存在多个用户,puppet清单也可以执行循环 我读过关于hiera的文章,但假设我们不使用hiera,有没有任何可能的方法。可以使用内置和函数的组合来实现这一点,至少对于YAML和JSON是这样 使用内置函数

我正在为puppet做一个项目,但目前只停留在一个逻辑上

所以,我们想知道我们可以从puppet清单文件中的.yaml、.json或纯文本文件中获取变量吗

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


我读过关于hiera的文章,但假设我们不使用hiera,有没有任何可能的方法。

可以使用内置和函数的组合来实现这一点,至少对于YAML和JSON是这样

  • 使用内置函数和
    parseyaml
    parsejson
    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}
  • 或者,使用
    loadyaml
    loadjson
    stdlib函数:
这种方法的问题是,您需要知道Puppet master上的文件路径。或者,您可以使用Puppet 6函数从代理节点上的文件读取数据

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

$myhash = loadyaml('/etc/puppet/data/myfile.yaml')
notice($myhash)