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为这样的提供程序不存在。

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

4

1 回答 1

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 => absent等等ensure => latest
于 2019-03-28T07:02:19.110 回答