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 / 问题 / 127460
In Process
joeforker
joeforker
Asked: 2010-03-30 12:50:36 +0800 CST2010-03-30 12:50:36 +0800 CST 2010-03-30 12:50:36 +0800 CST

如何使用 puppet 安装 yum 包组?

  • 772

除了 exec,puppet 是否有办法安装 yum 软件包组(例如“开发工具”)?

linux yum redhat puppet automation
  • 5 5 个回答
  • 13554 Views

5 个回答

  • Voted
  1. Jakov Sosic
    2013-11-22T09:12:46+08:002013-11-22T09:12:46+08:00

    我今天遇到了类似的请求,但如果事情可以通过任何其他方式解决,我不喜欢执行官。所以我选择了一条不同的路径并为“yumgroup”编写了一个简单的自定义类型。只需将这些文件放在模块路径中的任何模块中即可:

    “模块名/lib/puppet/provider/yumgroup/default.rb”

    Puppet::Type.type(:yumgroup).provide(:default) do
      desc 'Support for managing the yum groups'
    
      commands :yum => '/usr/bin/yum'
    
      # TODO
      # find out how yum parses groups and reimplement that in ruby
    
      def self.instances
        groups = []
    
        # get list of all groups
        yum_content = yum('grouplist').split("\n")
    
        # turn of collecting to avoid lines like 'Loaded plugins'
        collect_groups = false
    
        # loop through lines of yum output
        yum_content.each do |line|
          # if we get to 'Available Groups:' string, break the loop
          break if line.chomp =~ /Available Groups:/
    
          # collect groups
          if collect_groups and line.chomp !~ /(Installed|Available)/
            current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
            groups << new(
              :name   => current_name,
              :ensure => :present
            )
          end
    
          # turn on collecting when the 'Installed Groups:' is reached
          collect_groups = true if line.chomp =~ /Installed Groups:/
        end
        groups
      end
    
      def self.prefetch(resources)
        instances.each do |prov|
          if resource = resources[prov.name]
            resource.provider = prov
          end
        end
      end
    
      def create
        yum('-y', 'groupinstall', @resource[:name])
        @property_hash[:ensure] == :present
      end
    
      def destroy
        yum('-y', 'groupremove', @resource[:name])
        @property_hash[:ensure] == :absent
      end
    
      def exists?
        @property_hash[:ensure] == :absent
      end
    
    end
    

    “模块名/lib/puppet/type/yumgroup.rb”

    Puppet::Type.newtype(:yumgroup) do
    @doc = "Manage Yum groups
    
    A typical rule will look like this:
    
    yumgroup { 'Development tools':
      ensure => present,
    }
    "
        ensurable
    
        newparam(:name) do
           isnamevar
           desc 'The name of the group'
        end
    
    end
    

    之后,在启用 pluginsync 的情况下运行 puppet 代理,您可以使用如下自定义类型:

    yumgroup {'Base': ensure => present, }
    

    或者:

    yumgroup {'Development tools': ensure => absent, }
    

    您可以通过运行以下命令查看安装了哪些组:

    puppet resource yumgroup
    

    请享用!

    • 10
  2. Chris Jenkins
    2012-01-31T21:40:55+08:002012-01-31T21:40:55+08:00

    这是“yumgroup”傀儡资源类型的定义。它默认安装默认包和强制包,并且可以安装可选包。

    这个定义还不能删除 yum 组,尽管它很容易实现。我没有为自己烦恼,因为在某些情况下它会导致 puppet 出现循环。

    这种类型需要安装 yum-downloadonly rpm,我认为它只适用于 RHEL/CentOS/SL 6。在我写这篇文章的时候,yum 在以前版本上的退出状态是错误的,所以“除非”参数不起作用没有扩展到 grep 的输出。

    define yumgroup($ensure = "present", $optional = false) {
       case $ensure {
          present,installed: {
             $pkg_types_arg = $optional ? {
                true => "--setopt=group_package_types=optional,default,mandatory",
                default => ""
             }
             exec { "Installing $name yum group":
                command => "yum -y groupinstall $pkg_types_arg $name",
                unless => "yum -y groupinstall $pkg_types_arg $name --downloadonly",
                timeout => 600,
             }
          }
       }
    }
    

    我故意省略了使 yum-downloadonly 成为依赖项,因为它可能与其他人的清单冲突。如果您想这样做,请在单独的清单中声明 yum-downloadonly 包并将其包含在此定义中。不要在此定义中直接声明,否则如果您多次使用此资源类型,puppet 将出错。exec 资源应该需要 Package['yum-downloadonly']。

    • 4
  3. user1804
    2010-04-21T09:34:55+08:002010-04-21T09:34:55+08:00

    我在Puppet Type Reference中找不到Package 类型的任何内容,所以我在 Freenode 上的 Puppet IRC 频道上询问(#puppet,奇怪的是)并没有得到任何结果,所以我认为答案是“还没有”。

    • 3
  4. Jeremy Bouse
    2010-06-19T13:34:07+08:002010-06-19T13:34:07+08:00

    您可以通过Puppet Exec Type处理此问题,以执行必要的组安装。我肯定会包含一个 good onlyiforunless选项,以便它只在需要时执行它,或者设置为refreshonly并通过 a 触发它,Notify这样它就不会每次都运行。该Exec类型将在 puppet 客户端上为您本地执行命令,前提是它被触发。

    • 3
  5. Michal Wasilewski
    2016-05-17T00:17:11+08:002016-05-17T00:17:11+08:00

    我喜欢带有自定义资源的解决方案,但它不是幂等的。我对存在的看法?功能:

    Puppet::Type.type(:yumgroup).provide(:default) do
      desc 'Support for managing the yum groups'
    
      commands :yum => '/usr/bin/yum'
    
      # TODO
      # find out how yum parses groups and reimplement that in ruby
    
      def self.instances
        groups = []
    
        # get list of all groups
        yum_content = yum('grouplist')
    
        # turn of collecting to avoid lines like 'Loaded plugins'
        collect_groups = false
    
        # loop through lines of yum output
        yum_content.each do |line|
          # if we get to 'Available Groups:' string, break the loop
          break if line.chomp =~ /Available Groups:/
    
          # collect groups
          if collect_groups and line.chomp !~ /(Installed|Available)/
            current_name = line.chomp.sub(/^\s+/,'\1').sub(/ \[.*\]/,'')
            groups << new(
              :name   => current_name,
              :ensure => :present
            )
          end
    
          # turn on collecting when the 'Installed Groups:' is reached
          collect_groups = true if line.chomp =~ /Installed Groups:/
        end
        groups
      end
    
      def self.prefetch(resources)
        instances.each do |prov|
          if resource = resources[prov.name]
            resource.provider = prov
          end
        end
      end
    
      def create
        yum('-y', 'groupinstall', @resource[:name])
        @property_hash[:ensure] == :present
      end
    
      def destroy
        yum('-y', 'groupremove', @resource[:name])
        @property_hash[:ensure] == :absent
      end
    
    
      def exists?
        cmd = "/usr/bin/yum grouplist hidden \"" + @resource[:name] + "\" | /bin/grep \"^Installed\" > /dev/null"
        system(cmd)
        $?.success?
      end
    
    end
    
    • 1

相关问题

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 您如何优化新用户设置?

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

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