2017-10-07 2 views
0

Je reçois une erreur de modèle due à backend.key=<%= node['key']%> utilisé dans la source key.properties.erb n'a pas de valeur lors de l'exécution de shellout.Impossible de définir l'attribut de noeud à l'exécution et de le référencer dans le modèle de chef

Error : Chef::Mixin::Template::TemplateError - undefined method `[]' for nil:NilClass 

I ont un bloc de rubis pour obtenir la sortie du fichier cat /tmp/key.txt et l'attribution d'une valeur de noeud.

bloc Ruby:

ruby_block "Get_key" do 
    block do 
     #tricky way to load this Chef::Mixin::ShellOut utilities 
     Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)  
     command = 'cat /tmp/key.txt' 
     command_out = shell_out(command) 
     node.set['key'] = command_out.stdout 
    end 
    action :create 
end 

Erb:

backend.key=<%= node['key']%> 

Répondre

0

Il n'y a pas besoin de shell_out de lire le contenu d'un fichier. Essayez ceci:

ruby_block "Get_key" do 
    only_if { node['key'] == "" } 
    block do 
    node.set['key'] = File.read('/tmp/key.txt') 
    end 
end 

Mais je pense que votre problème réel est ailleurs. Le message d'erreur indique que node est nil dans votre modèle, ce qui est plutôt inhabituel. Donc, soit je suis aveugle et vous avez vraiment une faute de frappe dans la ligne de modèle publié, ou vous avez simplifié votre exemple de code de telle sorte qu'il cache votre erreur. Je suppose que votre modèle réel ressemble plus

backend.key=<%= node['foo']['key']%> 

et foo ne pas être un tableau. Regarde ça.

+0

Je suis en train de faire une chose assez similaire [ici] (https://github.com/TYPO3-cookbooks/gerrit/blob/fc82b9d82663f040116aed62bdcc3991e858ab98/recipes/peer_keys.rb) – StephenKing

0

Veuillez ne pas utiliser ce motif. Il est lent et met des données supplémentaires dans votre objet nœud qui prend de l'espace et de la RAM et vous rend l'index de recherche triste. Ce que vous voulez, c'est ceci:

template "whatever" do 
    # Other stuff ... 
    variables my_file: lazy { IO.read('/tmp/key.txt') } 
end 

Cela retardera la lecture jusqu'à l'heure de convergence.

+0

Salut, j'ai essayé votre approche et a la valeur ci-dessous dans le modèle: backend.key = # Aby

+0

J'ai changé le template erb comme ci-dessous: backend. key = <%= @key%> – Aby

+0

Utilisez-vous Chef 13? Sinon, cela doit être 'variables paresseux {{key: IO.read (...)}}'. – coderanger