2017-02-09 18 views
0

ich ein Standard-Attribut definiert:Chef Attribut außer Kraft setzen nicht Wirksam

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

, die auf einem Rezept außer Kraft gesetzt ist (1) und ist auf Rezept verwendet (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 

Auf dem Rezept, das das Attribut wird (1) außer Kraft gesetzt, je die Attributänderungen auf den Inhalt einer Datei:

/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 

Hier ist, wie die r ECIPE (2) versucht, das Attribut zu verwenden:

/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 

jedoch, wenn das Kochbuch läuft und es wird Rezept (2) der Wert immer noch auf „dummy_flag“, wie es nie außer Kraft gesetzt wurde eingestellt. Ich habe versucht, das Attribut mit "node.force_default" ohne Erfolg einzustellen.

Nachdem die Datei mit einer Fahne von „A“ ist nicht mit Auswirkungen auch gedacht, die Datei korrekt gelesen wird ...

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

Was soll ich fehlen, für das Attribut korrekt außer Kraft gesetzt werden?

Antwort

-1

fand mein Problem schließlich, das Problem war, dass ich versuche, das Attribut in einem ruby_block zu überschreiben, die später als ich dachte ausgeführt wurde.

Ich entfernte den Rubinblock, um den Koch zu zwingen, es früher zu laufen, und es löste mein Problem.

+3

Chef garantiert die Bestellung, es ist einfach nicht die Reihenfolge, die Sie dachten, es war. Siehe https://coderranger.net/two-pass für einen Überblick :) – coderanger

+0

danke für den Link :) – david

Verwandte Themen