了解Chef的运行列表订单

时间:2015-10-15 17:45:49

标签: php apache vagrant chef librarian

我正在学习厨师,到目前为止,我知道最好将所有的opscode cookbook放在cookbooks目录中,并将所有自定义设置放在site-cookbooks中。通过这种方式,我可以在site-cookbooks中镜像apt cookbook并更​​改

默认[' apt'] [' compile_time_update'] = true

强制进行apt-get更新,之前它没有做过。 顺便找出这个属性文件将被命名为" customize.rb"我已经花了很长时间,据我所知,在任何地方都没有记录。

为了获得所有带有它的烹饪书的简单LAMP堆栈的依赖关系我正在使用vagrant-librarian插件。 所以我的Cheffile看起来像这样。

site 'http://community.opscode.com/api/v1'

cookbook 'apt', '~> 2.8.2'
cookbook 'openssl', '~> 4.4.0'
cookbook 'apache2', '~> 3.1.0'
cookbook 'mysql', '~> 6.1.0'
cookbook "php", github: "priestjim/chef-php"
cookbook 'phpmyadmin', '~> 1.0.6'

我的Vagrantfile如下:

Vagrant.configure(2) do |config|
   config.vm.box = "ubuntu/trusty64"
   config.vm.provider "virtualbox" do |v|
      v.memory = 1024
      v.name = 'chef-lamp'
   end
   config.vm.network "private_network", ip: "192.168.33.10"
   config.vm.host_name = "project.dev"
   config.vm.synced_folder "./public", "/vagrant/"

   config.omnibus.chef_version = "12.3.0"
   config.vm.provision "chef_solo" do |chef|
   chef.arguments = '--force-formatter'
   chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
   chef.add_recipe 'apt'
   chef.add_recipe 'build-essential'
   chef.add_recipe 'mysql'
   chef.add_recipe 'xml'
   chef.add_recipe 'openssl'
   chef.add_recipe 'apache2'
   chef.add_recipe 'apache2::mod_php5'
   chef.add_recipe 'apache2::mod_rewrite'
   chef.add_recipe 'php'
   chef.add_recipe 'php::module_mysql'
   chef.add_recipe 'apache2::mod_php5'
   chef.add_recipe 'apache2::vhost'
   #chef.add_recipe 'phpmyadmin'
  end
 end

我的主要问题是为什么厨师在处理apt cookbook之后总是试图安装php,尽管它在运行列表中是向下的,这会在尝试重启apache时导致编译错误,例如因为apache正在运行线程MPM,但你的PHP模块没有被编译为线程安全。

当我将配置分成两个部分,第一次运行时没有任何php资源,然后在第二次运行(vagrant provision)中添加php资源,那么它工作正常。

我在那里错过了什么......我怎么能告诉大厨要经历" apt,apache2,mysql," - 首先....然后安装php ??

另一个问题是 - 我可以保证图书管理员添加的所有依赖项都由chef(自动)包含在运行列表中,或者我是否必须像我一样手动包含所有这些依赖项" build-要领"例如在我的Vagrantfile中。

希望有人可以帮助我,谢谢。

2 个答案:

答案 0 :(得分:1)

可以使用run_action方法在运行运行列表之前执行操作。 Priestjim cookbook以这种方式安装php。解决方案可能是使用社区食谱和复制自定义食谱,或在自定义食谱中进行PHP安装。

答案 1 :(得分:0)

解决方案是在site-cookbooks中编写自定义配方并更改软件包安装,其中#在编译时运行软件包安装到以下

node['php']['packages'].each do |pkg|
  package pkg
end

当然还要将原始配方中的所有以下模板和目录定义附加到自定义配方。

似乎现在正在工作。

这可能对任何人都有用,虽然它可能不是厨师专业人员的方式。