2017-08-18 2 views
0

J'ai rencontré un problème étrange avec (chef) avec le chef-client (12.18.31, Ruby intégré est ruby ​​2.3.1p112) sur Windows. Il ne suffit pas d'utiliser la valeur de l'attribut node dans la recette - j'ai besoin de le comparer par rapport à true. Pour être précis:Étrange chef émission évaluation de vrai/faux

desired_mcafee_state = 
    node['McAfee_enabled'] ? [:enable, :start] : [:disable, :stop] 

puts "DEBUG: McAfee is #{node['McAfee_enabled']}, desired state is: #{desired_mcafee_state}" 

Ce produit sortie de débogage:

DEBUG: McAfee is false, desired state is: [:enable, :start] 

alors que cette syntaxe:

desired_mcafee_state = 
    node['McAfee_enabled'] == true ? [:enable, :start] : [:disable, :stop] 

puts "DEBUG: McAfee is #{node['McAfee_enabled']}, desired state is: #{desired_mcafee_state}" 

correctement produit:

DEBUG: McAfee is false, desired state is: [:disable, :stop] 

Cela fonctionne très bien dans irb:

$ irb 
irb(main):001:0> node={} 
=> {} 
irb(main):002:0> node['McAfee_enabled']=false 
=> false 
irb(main):003:0> desired_mcafee_state = 
irb(main):004:0* node['McAfee_enabled'] ? [:enable, :start] : 
[:disable, :stop] 
=> [:disable, :stop] 

Un bug ou une bizarrerie de chef Je ne comprends pas?

+2

Dans ce premier exemple, êtes-vous sûr que ce n'est pas la chaîne '" false "'? – coderanger

+0

Si c'est une chaîne, soyez prudent, comme "vrai"! = True –

+0

Et surtout, "faux" est une valeur de vérité (parce que chaque chaîne est une valeur de vérité). – coderanger

Répondre

1

Résolue dans les commentaires, la valeur était la chaîne "false", ce qui dans la vision de Ruby du monde est véridique.