我试图设置一个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
,因为这样的提供程序不存在。
安装此软件包的正确方法是什么?
答案 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 => absent
或ensure => latest
等情况下也是如此。