2013-08-27 3 views
3

Я пытаюсь добавить пользовательский код в opsworks развертывает поваренную книгу, связанный с шагом before_migrate:Использования модифицированного opsworks развернуть поваренный неизменен объект ошибка

before_migrate do 
    link_tempfiles_to_current_release 
    deploy_version = Time.now.strftime("%Y%m%d%H%M%S") 

    if node['deploy_app'] == 'web' 
    link "/var/lib/tomcat#{node["tomcat"]["base_version"]}/webapps/ROOT###{deploy_version}" do 
     to "#{release_path}" 
    end 

Проблемой у меня есть, когда я включаю развернуть поваренную книгу в моем сайте-поваренной пакете, я получаю ошибку шашлычника:

[2013-08-27T16:45:05+00:00] FATAL: Chef::Exceptions::ImmutableAttributeModification: ruby_block[Compile Custom OpsWorks Run List] (opsworks_custom_cookbooks::execute line 3) had an error: Chef::Exceptions::ImmutableAttributeModification: Node attributes are read-only when you do not specify which precedence level to set. To set an attribute use code like `node.default["key"] = "value"' 

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

ответ

1

В шеф-повара атрибуты имеют несколько значений приоритета, чаще всего используемые, по-умолчанию, по умолчанию и переопределяют. http://docs.opscode.com/chef_overview_attributes.html Вы должны найти, где вы устанавливаете атрибут, указав только узел ['something']. Это не похоже на код, который вы вставили.

3

Начиная с шеф-повара 11 атрибут должен указывать уровень приоритета. В Chef 10, вы могли бы сделать что-то вроде этого:

node['foo']['bar'] = 'my new value' 

В Chef 11 вы должны указать уровень приоритета для этого значения:

node.set['foo']['bar'] = 'my new value' 

Вы также можете использовать default и override (который соответствуют attribute precedence levels:

node.default['foo']['bar'] = 'my new value' 
node.override['foo']['bar'] = 'my new value' 

Я подозреваю, что поваренная книга, которую вы используете (или зависимую поваренную) устанавливает данные об узле с использованием устаревшего синтаксиса.