我正在使用yumrepo内置类型。我可以获得与 hiera 工作的基本集成
yumrepo { hiera('yumrepo::name') :
metadata_expire => hiera('yumrepo::metadata_expire'),
descr => hiera('yumrepo::descr'),
gpgcheck => hiera('yumrepo::gpgcheck'),
http_caching => hiera('yumrepo::http_caching'),
baseurl => hiera('yumrepo::baseurl'),
enabled => hiera('yumrepo::enabled'),
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试删除该定义并改为 for hiera_include('classes')
,这就是我在相应的 yaml 后端中得到的
classes:
- "yumrepo"
yumrepo::metadata_expire: 0
yumrepo::descr: "custom repository"
yumrepo::gpgcheck: 0
yumrepo::http_caching: none
yumrepo::baseurl: "http://myserver/custom-repo/$basearch"
yumrepo::enabled: 1
Run Code Online (Sandbox Code Playgroud)
我在代理上收到此错误
服务器上的错误 400:找不到 yumrepo 类
我猜您无法摆脱某种带有 hiera 和资源类型的最小节点声明?也许hiera_hash是要走的路?
我试了一下,但它产生了语法错误
yumrepo { 'hnav-development':
hiera_hash('yumrepo')
}
Run Code Online (Sandbox Code Playgroud)
我最终使用了create_resources。本质上,它提供了使用 hiera 将定义的类型映射到节点的能力,hiera_include
与开箱即用的类的方式大致相同。
file
通过此设置,我可以在层次结构的任何级别声明任意数量的资源类型,而且配置全部位于 hiera 数据源中。
/etc/hiera.yaml
:hierarchy:
- defaults
- "%{environment}"
Run Code Online (Sandbox Code Playgroud)
/var/lib/hiera/defaults.yaml
classes:
- hiera_file_wrapper
hiera_file:
hiera-two:
path: /home/quickshiftin/hiera-two
ensure: file
content: 'Hiera two'
Run Code Online (Sandbox Code Playgroud)
/var/lib/hiera/生产.yaml
hiera_file:
hiera-baby:
path: /home/quickshiftin/hiera-baby
ensure: file
content: 'Hiera baby!
Run Code Online (Sandbox Code Playgroud)
模块/hiera_file_wrapper/manifestes/init.pp
class hiera_file_wrapper()
{
create_resources(file, hiera_hash('hiera_file'))
}
Run Code Online (Sandbox Code Playgroud)
清单/site.pp
hiera_include('classes')
Run Code Online (Sandbox Code Playgroud)