【发布时间】:2018-03-16 16:52:32
【问题描述】:
我需要通过Yum 来自本地仓库的install/update/remove RPM 软件包列表。 install/update/remove 需要作为一个 yum 事务一起发生。
目前我知道 Puppet 中包管理的以下选项。
-
使用包资源类型 - 使用 3 个不同的 yum 事务 ID 完成作业
class my-application::packages() { package { 'postfix': ensure => 'present', } package { 'postfix-perl-scripts': ensure => 'present', } package { 'mailx': ensure => 'present', } } -
使用 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 ; ", } } -
使用 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 install和yum remove以使我的服务器处于所需状态,而我能够做到这一点的唯一方法是通过yum shell exec如上所述。 -
我在你的问题的散文中看到了你对此的评论,但你的例子都未能真正表明这一点,而且我确实不相信你可以使用普通的 yum cli 来构建一个复杂的事务排序(尽管 yum 完全有能力为您执行此操作,如果安装或删除需要根据依赖关系完成)。
标签: bash transactions puppet yum