gpt4 book ai didi

puppet - 自定义事实应该在安装包后运行

转载 作者:行者123 更新时间:2023-12-04 02:18:39 25 4
gpt4 key购买 nike

我的 php 模块中有一个小的自定义事实

Facter.add('php_extension_version') do
setcode do
Facter::Core::Execution.exec("php -i | awk '/^PHP Extension =>/ { print $4}'") || nil
end
end

这显然需要安装 php 二进制文件。但是,我注意到所有的事实在应用目录之前都运行了一次,所以这个事实在安装 php 之前是无效的。

在安装模块后有没有办法收集信息?除了 facter 之外,是否还有另一种公开此信息的方式?

更新

我使用这两个事实来确定多个 .so 文件中的哪一个是正确安装的:

if $php_zts_enabled {
$so_name = "newrelic-$php_extension_version.so"
} else {
$so_name = "newrelic-$php_extension_version-zts.so"
}

file {"/usr/lib64/php5/extensions/newrelic.so":
source => "file:///opt/newrelic-php5-$version-linux/agent/x64/$so_name",
owner => root,
group => root,
mode => 0644,
notify => Service['apache'],
require => Exec["extract-php-agent-$version"]
}

位于agent/x64目录下的文件可以是

newrelic-20060613.so      newrelic-20090626-zts.so  newrelic-20121212.so      newrelic-20131226-zts.so
newrelic-20060613-zts.so newrelic-20100525.so newrelic-20121212-zts.so
newrelic-20090626.so newrelic-20100525-zts.so newrelic-20131226.so

最佳答案

您基本上只有两次机会在节点上执行代码:

  1. 作为 Facter 事实的一部分。如您所知,这发生在 puppet 应用目录之前,因此依赖于 puppet 运行结果的任何事实在下一次运行之前都没有用。
  2. 作为自定义提供程序的一部分。您可以创建自定义类型和提供程序来安装在决定要做什么之前检查节点状态的扩展。提供程序在节点上执行,只要您知道整个提供程序生命周期,您就可以在 PHP 安装后实现这一点。但是,与普通 puppet 模块相比,这非常复杂。

除了这些选项之外,通常的做法是在您自己的 list 中强制执行 php 的版本和配置,然后将该信息传递到此处。根据安装的软件包,您应该已经知道 PHP 及其扩展的版本。

关于puppet - 自定义事实应该在安装包后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com