Рецепт chef-solo nginx не улавливает мои атрибуты

суть моей проблемы находится здесь:

https://gist.github.com/tsabat/a8f27ae6ac7d1fd3b6f7

Проблема высокого уровня заключается в том, что chef-solo, похоже, не улавливает атрибуты, которые я установил в своем файле attriutes/default.rb для рецепта.

Я недавно перешел на шеф-повара 11 с 10, и я думаю, что некоторые критические изменения меня забивают.

Пожалуйста помоги.


person timsabat    schedule 31.07.2013    source источник
comment
Посмотрите здесь. Ваша проблема, кажется, связана с этим.   -  person cassianoleal    schedule 01.08.2013
comment
Вы правы, это как-то связано с этим. Я действительно решил эту проблему, не завися от атрибутов в рецептах, вместо этого я переопределил свои атрибуты в роли.   -  person timsabat    schedule 01.08.2013
comment
Ой. Некоторое время я сталкивался с этой же проблемой, используя шеф-соло. Спасибо, что спросили об этом.   -  person Kyle Kelley    schedule 26.08.2013


Ответы (3)


Вам необходимо переопределить дополнительные переменные: prefix, url, sbin_path и default_configure_flags:

set['nginx']['version'] = "1.5.3"
set['nginx']['source']['version'] = "1.5.3"
# The Chef checksum of a binary is determined by: shasum -a 256 FILE_NAME
set['nginx']['source']['checksum'] = "edcdf2030750b4eb1ba8cd79365c16a3e33e6136b7fdd8a1a7b4082397f4e92b"
set['nginx']['source']['prefix'] = "/opt/nginx-#{node['nginx']['source']['version']}"
set['nginx']['source']['url'] = "http://nginx.org/download/nginx-#{node['nginx']['source']['version']}.tar.gz"
set['nginx']['source']['sbin_path'] = "#{node['nginx']['source']['prefix']}/sbin/nginx"

set['nginx']['source']['default_configure_flags'] = [
  "--prefix=#{node['nginx']['source']['prefix']}",
  "--conf-path=#{node['nginx']['dir']}/nginx.conf",
  "--sbin-path=#{node['nginx']['source']['sbin_path']}"
]

Это связано с тем, что эти переменные встраивают другие переменные, и они устанавливаются с использованием значений, которые еще не были переопределены вашими значениями.

Указав эти дополнительные переменные в вашей кулинарной книге оболочки, вы гарантируете, что они используют все обновленные значения, которые вы ожидаете.

Кроме того, поскольку значения default уже установлены в кулинарной книге nginx, лучше использовать что-то вроде set (псевдоним для normal), так как это более точно описывает то, что вы делаете, и имеет более высокий приоритет атрибута.

person justsee    schedule 19.08.2013
comment
Конечно, я могу это сделать. Но, кажется, перебор. Я хотел бы знать, почему производные переменные не могут распознать, что я переопределил те, из которых они получены. - person timsabat; 19.08.2013

Ответил по существу.

Вам нужен другой атрибут по умолчанию "default['nginx']['version'] = 1.5.3", иначе он переопределит ваш флаг компиляции --prefix.

person shawnzhu    schedule 01.08.2013
comment
Даже если этот атрибут определен, я все равно получаю неверный префикс. Ознакомьтесь с сутью. - person timsabat; 01.08.2013
comment
Это действительно как-то связано с порядком сходимости и шеф-поваром 11, потому что, когда я переместил атрибуты в роль, все стало работать правильно. - person timsabat; 01.08.2013

Итак, у меня нет ответа на вопрос, почему шеф-повар по-разному относится к переменным в рецептах, но вот мое решение.

Некоторые изменения в способе извлечения атрибутов из поваренной книги меня раздосадовали. Поскольку я использовал Chef Solo и он не поддерживает роли, я просто создал роль, переопределил ее атрибуты, а затем вызвал свою базовую кулинарную книгу.

Эта модель более тесно связана с тем, как я представляю себе Chef, когда работаю над сервером, поэтому для меня это приемлемое решение. Я сделал следующее:

Создайте роль с именем База

name "base"
description "The base role"
run_list "recipe[base]"
override_attributes "nginx" =>
  {
    'install_method' => 'source',
    'source' => {'version' => '1.5.3'}
  }

Добавьте роль в список выполнения через Vagrantfile.

config.vm.provision "chef_solo" do |chef|
  chef.cookbooks_path = "vendor/cookbooks"
  chef.roles_path = "roles"
  chef.data_bags_path = "data_bags"
  chef.add_role "base"
end
person timsabat    schedule 01.08.2013