2017-02-09 7 views
0

у меня есть атрибут по умолчанию, определяемый:Chef атрибутов переопределения не вступают в силу

/cookbook-test/attributes/default.rb 
## Environemnt attributes 
default['cookbook-test']['flags']['test']="dummy_flag" 

Вот перекрываться по рецепту (1) и используется по рецепту (2)

/cookbook-test/recipes/default.rb 
include_recipe 'cookbook-test::set-flag-based-on-file' #(1) 
#... 
include_recipe 'cookbook-test::other-recipe' # (2) this recipe needs the attribute 

На рецепт, который атрибут переопределяется (1), изменение атрибутов в зависимости от содержимого файла:

/cookbook-test/recipes/set-flag-based-on-file.rb 
ruby_block "Use attribute (A/B)" do 
    block do 
     # reads file for flag "A"/"B" 
     local_flag= ::File.read('/home/user/.flag').chomp 

     if local_flag== "A" 
      node.set['cookbook-test']['flags']['test'] = true 
     elsif local_flag== "B" 
      node.set['cookbook-test']['flags']['test'] = false 
     else 
      node.set['cookbook-test']['flags']['test'] = false 
     end 
    end 
end 

Вот как г ECIPE (2) пытается использовать атрибут:

/cookbook-test/recipes/other-recipe.rb 
flag= node['cookbook-test']['flags']['test'] 
if flag == true 
    # something 
elsif flag == false 
    # something 
else 
    Chef::Log.error("XX attribute is not SET!") 
end 

Однако когда поваренная книга работает и он получает рецепт (2) значение по-прежнему установлен на «dummy_flag», как это никогда не было преодолено. Я попытался установить атрибут с «node.force_default» без успеха.

Имея файл с флагом «А», не имеющий эффект даже думал, что файл уже правильно читать ...

var/chef/log/client.log 
... 
[2017-02-09T12:56:06-05:00] ERROR: XX attribute is not SET! 
... 

Что я не хватает, для атрибута должен быть переопределен правильно?

ответ

-1

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

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

+3

Шеф-повар действительно гарантирует заказ, это просто не тот порядок, о котором вы думали. См. Https://coderanger.net/two-pass для обзора :) – coderanger

+0

спасибо за ссылку :) – david