我的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
答案 0 :(得分:3)
您基本上只有两次机会在节点上执行代码:
除了这些选项之外,执行此操作的常规方法是在您自己的清单中强制执行php的版本和配置,然后将该信息传递到此处。您应该已经根据已安装的软件包知道PHP及其扩展的版本。
答案 1 :(得分:1)
我会修改这个事实,以便它只在二进制文件存在时出现(因此它不会在第一次运行时出现)。
Facter.add('php_extension_version') do
setcode do
if system("which php > /dev/null 2>&1")
Facter::Core::Execution.exec("php -i | awk '/^PHP Extension =>/ { print $4}'") || nil
end
end
end
然后在你的清单中你将原始代码包装在if
中if $php_extension_version {
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"]
}
}