AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 549720
Accepted
quickshiftin
quickshiftin
Asked: 2013-10-31 10:42:36 +0800 CST2013-10-31 10:42:36 +0800 CST 2013-10-31 10:42:36 +0800 CST

hiera_include 资源类型的等效项

  • 772

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

如果我尝试删除该定义并改为使用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

我在代理上收到此错误

服务器上的错误 400:找不到类 yumrepo

我猜您无法摆脱带有层次结构和资源类型的某种最小节点声明?也许hiera_hash是要走的路?

我试了一下,但它会产生语法错误

  yumrepo { 'hnav-development':
    hiera_hash('yumrepo')
  }
puppet
  • 4 4 个回答
  • 4329 Views

4 个回答

  • Voted
  1. Best Answer
    quickshiftin
    2013-10-31T21:02:07+08:002013-10-31T21:02:07+08:00

    我最终使用了create_resources。从本质上讲,它提供了将定义的类型映射到具有层次结构的节点的能力,这与开箱hiera_include即用的类非常相似。

    通过此设置,我可以在层次结构的任何级别声明任意数量的file资源类型,而且配置都在层次数据源中。

    /etc/hiera.yaml

    :hierarchy:
      - defaults
      - "%{environment}"
    

    /var/lib/hiera/defaults.yaml

    classes:
      - hiera_file_wrapper
    hiera_file:
        hiera-two:
           path: /home/quickshiftin/hiera-two
           ensure: file
           content: 'Hiera two' 
    

    /var/lib/hiera/production.yaml

    hiera_file:
        hiera-baby:
           path: /home/quickshiftin/hiera-baby
           ensure: file
           content: 'Hiera baby!
    

    模块/hiera_file_wrapper/manifestes/init.pp

    class hiera_file_wrapper()
    {
        create_resources(file, hiera_hash('hiera_file'))
    }
    

    清单/site.pp

    hiera_include('classes')
    
    • 4
  2. Shane Madden
    2013-10-31T11:42:58+08:002013-10-31T11:42:58+08:00

    因为yumrepo是资源类型,而不是类,所以它不起作用。

    我会说在命名中放置一个类yumrepo_myreponame并让它声明yumrepo资源。如果需要,您也可以在 Hiera 中放置类参数,然后将它们传递给资源声明。

    例如,我有一个用于为服务器打开 EPEL 的模块,可以将其放入其 Hieraclasses阵列中以启用它。它的全部内容是:

    class epel_yumrepo {
      yumrepo { "epel":
        descr          => 'Extra Packages for Enterprise Linux 6 - $basearch',
        enabled        => 1,
        gpgcheck       => 1,
        gpgkey         => 'http://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6',
        mirrorlist     => 'https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch',
        failovermethod => "priority",
      }
    }
    
    • 0
  3. sciurus
    2013-10-31T13:35:34+08:002013-10-31T13:35:34+08:00

    假设您有一个名为 hnav 的 yum 存储库,并且您需要它根据您使用的操作系统版本(5 或 6)具有不同的 URL。

    您在/etc/puppet/hiera.yaml中配置了层次结构,例如

    :hierarchy:
    - "%{::operatingsystemmajrelease}"
    - common
    

    因此 hiera 将首先查找以操作系统版本5.yaml或6.yaml命名的 yaml 文件。如果它在那里找不到值,它将在common.yaml中查找。

    您编写了一个参数化类,以便 hiera 可以自动提供 url。

    模块/hnav/manifests.init.pp

    class hnav ( $url ) {
      yumrepo { 'hnav':
        enabled => true,
        baseurl => $url
      }
    }
    

    如果由于某种原因你不喜欢参数化的类,你可以把上面写成

    class hnav {
      yumrepo { 'hnav':
        enabled => true,
        baseurl => hiera('hnav::url')
      }
    }
    

    然后你配置了你想在所有节点上应用的类

    common.yaml

    classes:
      - hnav
    

    然后设置 URL 的值

    5.yaml

    hnav::url: http://example.com.yum/5/
    

    6.yaml

    hnav::url: http://example.com.yum/6/
    

    这是一个非常人为的例子,但也许它会帮助您了解 hiera 的使用位置。

    • 0
  4. Ben
    2014-09-21T22:37:01+08:002014-09-21T22:37:01+08:00

    我在工作中构建了 hiera_manifest 功能。本质上,它允许您通过 hiera yaml 调用模块、类和参数以及定义的类型。

    我只是把它放在Github上分享:https ://github.com/mlbam/hiera_manifest

    这有一点好处,因为在调用模块、类或类型时也会设置参数。

    需要注意的一件事是使用元参数时资源定义的某些语法有所不同。此外,在进行故障排除时,错误有时会出现在清单中,并且您不会收到引发错误的模块的正确错误消息。

    • 0

相关问题

  • 如何修复 Puppet 完全限定的参数路径错误?

  • puppet:修改配置文件后强制重启服务

  • 木偶模块资源

  • 傀儡主机名问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve