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 / 问题 / 111766
Accepted
Jon Haddad
Jon Haddad
Asked: 2010-02-11 16:49:27 +0800 CST2010-02-11 16:49:27 +0800 CST 2010-02-11 16:49:27 +0800 CST

在做任何其他事情之前向 puppet 添加一个 yum repo

  • 772

有没有办法强制傀儡先做某些事情?例如,在我安装任何软件包之前,我需要它在所有服务器上安装一个 RPM 以添加一个 yum 存储库(IUS 社区)。

puppet
  • 7 7 个回答
  • 45660 Views

7 个回答

  • Voted
  1. Best Answer
    Dave Cheney
    2010-02-21T20:52:55+08:002010-02-21T20:52:55+08:00

    如果您想确保在所有服务器上都安装了存储库,那么我建议您这样做

    node default {
       include base
    }
    
    class base {
       yumrepo { "IUS":
          baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
          descr => "IUS Community repository",
          enabled => 1,
          gpgcheck => 0
       }
    }
    

    然后,对于任何扩展的节点,base您都可以说

    class foo {
       package { "bar": ensure => installed, require => Yumrepo["IUS"] }
    }
    

    这将确保

    • bar除非定义 IUS 存储库,否则不会安装该软件包
    • 在定义 IUS 存储库之前,该软件包不会尝试安装
    • 37
  2. Steven Roberts
    2012-12-31T17:01:27+08:002012-12-31T17:01:27+08:00

    虽然阶段可以处理这个问题,特定的 yum repo 依赖项也可以,但更好的是一般地声明关系。

    只需放入 Yumrepo <| |> -> Package <| provider != 'rpm' |>您的木偶清单。

    node default {
      Yumrepo <| |> -> Package <| provider != 'rpm' |>
    }
    

    这使得所有 yumrepo 类型都将在没有 'rpm' 作为其提供者的任何包之前得到处理。后者的排除是为了让我可以使用(例如)epel-release RPM 包来帮助安装 yum 存储库。

    • 18
  3. Alexander Azarov
    2011-06-07T04:53:54+08:002011-06-07T04:53:54+08:00

    (我在回答几乎相同之后发现了这个问题..所以认为我的答案也适用于这里,值得重复一遍(在两个地方有答案更安全..)

    据我了解,这正是阶段的用途——它们允许您对类执行进行分组和排序。我使用“阶段”在 Debian 服务器上更新和配置 APT,这应该与您将要使用 YUM 执行的操作非常相似。

    首先,您在顶层(在“节点”之上)声明“yum”阶段,以便“yum”阶段中的类将在“main”类之前执行:

    stage { 'yum' : before => Stage['main'] }
    

    然后,您将阶段分配给类。您可以在节点定义中正确执行此操作:

    node default {
      class { 'yumrepos' : stage => yum }
    
      include packages
    }
    
    • 8
  4. Tom O'Connor
    2010-02-12T00:51:03+08:002010-02-12T00:51:03+08:00

    你可以使用标签。这将允许您使用firstrun或标记 repo 安装程序,

    然后运行

     puppetd --tags firstrun
    

    它只会执行与标签匹配的模块/语句。

    • 5
  5. Hamish Downer
    2010-02-21T15:22:57+08:002010-02-21T15:22:57+08:00

    您需要使用的关键是require关键字——“评估一个或多个类,将所需的类添加为依赖项”。

    使用 apt 存储库的示例可能是:

    class installcustompackages {
       # make sure we have the repository file and public key
       file { "/etc/apt/sources.list.d/myrepo.list":
          source => "puppet://puppet/files/etc/apt/sources.list.d/myrepo.list",
          ensure => present;
              "/etc/apt/trusted.gpg":
          source => "puppet://puppet/files/etc/apt/trusted.gpg",
       }
    
       # do an update whenever the list or trusted key file change
       exec { "/usr/bin/apt-get update":
          alias => "aptgetupdate",
          require => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
          subscribe => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
          refreshonly => true;
       }
    
       package { "mypackage":
          ensure => latest,
          require => Exec["aptgetupdate"];
                 "mypackage2":
          ensure => latest,
          require => Exec["aptgetupdate"];
       }
    
       service { "myservice":
          enable => false,
          require => Package[mypackage];
       }
    }
    

    (改编自puppet bootstrapping 的这个例子)。

    因此,您可以看到每个阶段如何要求先完成前一个阶段。我会让你弄清楚如何将它应用于 yum,因为我不熟悉它存储文件的位置。

    • 3
  6. tore-
    2010-02-28T04:00:08+08:002010-02-28T04:00:08+08:00

    Puppet 从上到下读取配置,因此如果您首先在该类中包含一个带有 yum 存储库的类,则此存储库将在其他任何内容之前添加。

    如果您在包上使用 require 设置,您将确保在添加包之前存在所需的资源类型,如下所示:

    node 'yournode.domain.com' {
       package { "bar": ensure => installed, require => Yumrepo["IUS"] }
       yumrepo { "IUS":
          baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
          descr => "IUS Community repository",
          enabled => 1,
          gpgcheck => 0
       }
    }
    

    上面的代码将在添加包之前添加 repo。

    • 0
  7. Oscar Montoya
    2015-02-10T15:56:01+08:002015-02-10T15:56:01+08:00

    像这样的东西对我有用:

    yumrepo { A:
      descr    => "A repo",
      baseurl  => '',
      enabled  => 1,
      gpgcheck => 1,
      gpgkey   => "",
      priority => 3
    }
    
    yumrepo { B:
      descr    => "B repo",
      baseurl  => '',
      enabled  => 1,
      gpgcheck => 1,
      gpgkey   => "",
      priority => 3
    }
    
    yumrepo { C:
      descr    => "C repo",
      baseurl  => '',
      enabled  => 1,
      gpgcheck => 1,
      gpgkey   => "",
      priority => 3;
    }
    
    Package {
      require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]]
    }
    

    我在 mysite.pp 上包含了类似的内容。这样,您的 puppet 模块就不会引用 yum repos。

    • 0

相关问题

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

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

  • 木偶模块资源

  • puppetrun 不报告客户端错误

  • 傀儡主机名问题

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +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