hiera_include 等效于资源类型

qui*_*tin 5 puppet hiera

我正在使用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)

qui*_*tin 4

我最终使用了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)