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

How do I install package from amazon-linux-extras using Puppet?

我正在尝试设置一个 Puppet 模块以在亚马逊上安装 PHP 7.3 Linux 2. 它可以作为 amazon-linux-extras 包提供。

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

amazon-linux-extras install php7.3

但我想将它定义为一个包并确保它已安装,如下所示:

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

不幸的是,我无法将包 provider 设置为 amazon-linux-extras,因为这样的提供商不存在。

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

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

可以说,应该创建一个新的 type/provider 来支持 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