Понимание порядка выполнения шеф-повара

Я учу шеф-повара, и до сих пор я понимал, что лучше всего иметь все поваренные книги opscode в каталоге поваренных книг и все мои настройки в кулинарных книгах сайта. Таким образом, я могу отразить, например, apt поваренную книгу в site-cookbooks и и изменить

default [‘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

Мой главный вопрос почему chef всегда пытается установить php сразу после работы с apt cookbook, хотя в списке запуска он находится далеко внизу, что приводит к ошибке компиляции при попытке перезапустить apache, например, apache работает с многопоточным MPM, но ваш модуль PHP не скомпилирован быть потокобезопасным.

Когда я разделяю инициализацию на две части с первым запуском без каких-либо php-ресурсов, а затем добавляю php-ресурсы во второй прогон (vagrant provision), тогда он работает нормально.

Что мне там не хватает … как я могу сказать chef, чтобы он запускал через «apt, apache2, mysql» — сначала …., а затем установил php ??

Другой вопрос: могу ли я быть уверен, что все зависимости, добавленные библиотекарем, включены в список выполнения chef (автоматически), или мне нужно включить все из них вручную, как я это сделал с «build-essentials», например, в моем Vagrantfile.

надеюсь, кто-нибудь может мне помочь, спасибо.

1

Решение

Возможно выполнить действие раньше, чем запуск run-list, используя метод run_action.
Priestjim cookbook устанавливает php таким образом. Решением может быть использование поваренной книги сообщества и копирование пользовательских рецептов или установка php внутри вашего собственного рецепта.

1

Другие решения

Решением было написание собственного рецепта в site-cookbooks и изменение установок пакетов, где говорится # Запустите установку пакета во время компиляции в следующее

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

и, конечно же, добавление всех следующих определений шаблонов и каталогов из исходного рецепта в пользовательский рецепт.

Кажется, сейчас работает.

Может быть, это полезно для всех, хотя это может быть не так, как это сделал бы профессиональный повар.

0

По вопросам рекламы [email protected]