如何使用Puppet从amazon-linux-extras安装软件包?

时间:2019-03-25 16:55:20

标签: puppet amazon-linux-2

我试图设置一个Puppet模块以在Amazon Linux 2上安装PHP 7.3。它可以作为amazon-linux-extras软件包使用。

我可以简单地使用CLI安装它:

amazon-linux-extras install php7.3

但是我想将其定义为软件包并确保已安装,如下所示:

package { "php7.3":
  ensure => installed,
  provider => 'amazon-linux-extras'
}

很遗憾,我无法将软件包provider设置为amazon-linux-extras,因为这样的提供程序不存在。

安装此软件包的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这时,Puppet似乎不支持amazon-linux-extras实用程序。

可以说,应该创建一个新的类型/提供程序来支持amazon-linux-extras。如果提出了被接受的功能请求,它可能存在于Puppet Core中。或者,如果您知道如何编写自定义类型和提供程序,则可以编写自己的文件并将其作为模块发布到Puppet Forge上。

同时,使用exec可以轻松编写定义的类型来解决此问题。

define al::amazon_linux_extras(
  Enum['present'] $ensure = present,
  ) {
  $pkg = $name
  exec { "amazon-linux-extras install -y $pkg":                                                                                                                        
    unless => "amazon-linux-extras list | grep -q '${pkg}=.*enabled'",                                                                                                 
    path   => '/usr/bin',                                                                                                                                              
  }                                                                                                                                                                    
}                                                                                                                                                                      

用法:

al::amazon_linux_extras { 'php7.3':
  ensure => present,
}

进一步的解释:

  • 我假设您会将定义的类型放在模块al中。但这可能是个人资料等。 profile::amazon_linux_extras是另一种可能性。
  • 我仅为了可读性而实现了ensure => present,也就是说,它实际上并没有做任何事情,并且在以后决定实现ensure => absentensure => latest等情况下也是如此。