2015-04-13 4 views
0

Для моей текущей проблемы я использую поваренную книгу nginx. То, что я хочу сделать, это установить его из источника (без проблем делать это с помощью nginx::source) и префикс его до /opt/nginx/<version>/, но он всегда будет префикс (по умолчанию) до /opt/nginx-<version>/.Как определить пользовательские атрибуты для кулинарной книги nginx?

Это мой ./attributes/default.rb:

node.override['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}" 
#also tested 
override['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}" 
#and also 
default['nginx']['source']['prefix'] = "/opt/nginx/#{node['nginx']['source']['version']}" 

Что я не понимая?

Благодаря


Дополнительной вещь будет: - Как я могу добавить префикс, как выше и создать SYM-ссылку на /opt/nginx/current (и сделать это даже после обновления)?

ответ

1

Итак, это недостаток в поваренной книге. Многие переменные строятся на основе значения этого одного атрибута, и если вы не установили значение переопределения FIRST, то значения в поваренной книге все равно будут выигрываться для полученных атрибутов.

Если вы установите переопределение на узле или окружении для nginx['source']['prefix'], которое должно работать, но это не идеально. Альтернативно, также переопределяйте производные значения.

https://github.com/miketheman/nginx/blob/master/attributes/source.rb

default['nginx']['source']['sbin_path'] = "#{node['nginx']['source']['prefix']}/sbin/nginx" 
default['nginx']['source']['default_configure_flags'] = %W(
    --prefix=#{node['nginx']['source']['prefix']} # <= this one needs overridden 
    --conf-path=#{node['nginx']['dir']}/nginx.conf 
    --sbin-path=#{node['nginx']['source']['sbin_path']} 
) 

Там могут быть и другие, но те два я знаю, и которые выделяются.

+0

IIRC Другой способ - принудительно переопределить исходный файл атрибута в оболочке с помощью 'include_attribute' ([Документация здесь] (https://docs.chef.io/attributes.html#attribute-file-orderering)) – Tensibai

+0

Я тестировал только с chefspec, поэтому я мог ошибаться, но я уверен, что файл атрибутов будет оцениваться только один раз, как рецепт. Поэтому, если вы используете 'include_attribute', но файл атрибутов уже обработан, он будет пропущен. Но я бы хотел, чтобы на этом не было доказано. –

+0

Я начал с того, что, если я правильно помню, я совершенно не уверен в этом. – Tensibai

Смежные вопросы