【问题标题】:Puppet package management - Yum transactionsPuppet 包管理 - Yum 交易
【发布时间】:2018-03-16 16:52:32
【问题描述】:

我需要通过Yum 来自本地仓库的install/update/remove RPM 软件包列表。 install/update/remove 需要作为一个 yum 事务一起发生。

目前我知道 Puppet 中包管理的以下选项。

  1. 使用包资源类型 - 使用 3 个不同的 yum 事务 ID 完成作业

     class my-application::packages()
     {
      package { 'postfix':
       ensure => 'present',
      }
      package { 'postfix-perl-scripts':
       ensure => 'present',
      }
      package { 'mailx':
        ensure => 'present',
      }
    }
    
  2. 使用 exec 资源类型 - 使用 3 个不同的 yum 事务 ID 完成作业

    class my-application::packages()
    {
      exec {'install_packages':
        provider => shell,
        path => [ "/bin/", "/usr/bin/" ],
        command => "/usr/bin/yum install postfix ; 
                    /usr/bin/yum install postfix-perl-scripts ; 
                    /usr/bin/yum install mailx ; ",
      }
    }
    
  3. 使用 exec 资源类型 - 作为 1 个 yum 事务 ID 完成的作业

    # less /path/to/yum_transaction
    install postfix
    install postfix-perl-scripts
    install mailx
    run
    
    class my-application::packages()
    {
      exec {'install_packages':
        provider => shell,
        path => [ "/bin/", "/usr/bin/" ],
        logoutput => "true",
        command => "/usr/bin/yum shell /path/to/yum_transaction",
      }
    }
    

当我有大量不同的包时,上述选项 3 可以工作,但不可扩展。

Puppet 中的包管理有哪些替代方法可以让我将所有工作作为 1 个事务完成?

【问题讨论】:

  • 除非有一些 puppet 限制,否则我不知道您可以在单个 yum install 命令行上列出要安装的多个软件包。因此,您无需使用 shell 脚本或将包分成三个 yum install 调用来执行此操作。
  • 没错,我也可以在exec 中使用yum install $package_list,并从类变量Hiera 甚至是平面文件中获取RPM 列表。我遇到的问题是我需要在一个事务中执行yum installyum remove 以使我的服务器处于所需状态,而我能够做到这一点的唯一方法是通过yum shell exec如上所述。
  • 我在你的问题的散文中看到了你对此的评论,但你的例子都未能真正表明这一点,而且我确实不相信你可以使用普通的 yum cli 来构建一个复杂的事务排序(尽管 yum 完全有能力为您执行此操作,如果安装或删除需要根据依赖关系完成)。

标签: bash transactions puppet yum


【解决方案1】:

这是 Puppet 的一个非常古老的问题,截至目前,它的 no good solution

很可能,您最好的选择确实是创建一个exec 资源,在一个yum 调用中安装多个包。有一个sort-of-related question 用户在其中执行此操作。

【讨论】:

    【解决方案2】:
    packages = [ 'postfix','wget' ]
    package { $packages:
       ensure => installed,
    }
    

    【讨论】:

    • 这会创建多个 puppet 资源,这本质上等同于 OP 的选项 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2012-04-21
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多