如何仅使用“php”食谱中的 Chef 的“php_pear”提供程序

如何仅使用“php”食谱中的 Chef 的“php_pear”提供程序

当使用 Vagrant(以及随后的 Chef)时,我使用 Zend Server CE 配置我的 VM,它会自动安装通常的 *AMP 堆栈。

我想通过 PEAR 安装一些软件包,而“php”cookbook 已经为这些软件包提供了“pear”和“pear_channel”提供程序。但是,通过调用require_recipe("php")default.rb会自动运行并尝试重新安装 PHP。

我只是想利用它的几个提供商而不执行default.rb

有没有办法做到这一点?

答案1

您需要确保所有 Chef 配方都是幂等的,并且对您的环境无损。当您要求或包含配方时,Chef 将始终运行 default.rb。

有两种方法可以解决此问题:

  1. 让你的 PHP 配方检查已安装的 PHP 二进制文件,如果发现则不执行任何操作
  2. 将安装步骤移至 default.rb 之外的新配方文件

第一种是最好的解决方案,但是如果您确实想要使用 PEAR 但又不想让 chef 管理 php,那么您可以选择第二种。

答案2

您可以通过在 cookbook 的 metadata.rb 中添加内容来指定您的 cookbook 依赖于 opscode php cookbook depends 'php'。通过使用depends,您不必实际运行 php cookbook。请参阅http://wiki.opscode.com/display/chef/Metadata#Metadata-depends

然后,假设 php cookbook 可从您的 chef 服务器获取,chef-client 运行将拉取 php cookbook,以便 php_pear 和 php_pear_channel 资源可用。在您自己的配方中,只需根据 php cookbook 添加说明即可:

php_pear "DB" do
  action :install
end

相关内容