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?
Dans ce premier exemple, êtes-vous sûr que ce n'est pas la chaîne '" false "'? – coderanger
Si c'est une chaîne, soyez prudent, comme "vrai"! = True –
Et surtout, "faux" est une valeur de vérité (parce que chaque chaîne est une valeur de vérité). – coderanger