Whenever a ternary is used are both conditions evaluated regardless ?
For example, I want to convert “my_other_var” to an object only if it is passed as as string, otherwise I don’t want to touch the object, and leave it as it is.
if my_other_var is str → It works
if my_other_var is dict → it gives me the error saying that my_other_var should be a string to be converted from_json. But I would expect that being the condition on the left = False, it would ignore the left condition on the ternary and only consider the rightmost condition.
I also tried using when:
– name: Set fact for string object
set_fact:
my_var: “{{ my_other_var | from_json }}”
when: (my_other_var | type_debug == ‘str’)
name: Set fat for dict object
set_fact:
my_var: “{{ my_other_var | from_json }}”
when: (my_other_var | type_debug == ‘dict’)
However, if “my_other_var” is dict, the first block (named set fact for string object) gives me the same error as before. I was actually expecting that being the when statement equals to false, it would simply ignore it.
UPDATE: PLEASE, DISCARD what I said about the when statement at the end of my post, in my original code I had a typo, and was not working for other reasons. The first part of the post about the ternary statement still stands
Whenever a ternary is used are both conditions evaluated regardless ?
For example, I want to convert "my_other_var" to an object only if it is passed as as string, otherwise I don't want to touch the object, and leave it as it is.
Thank you all for the answers. I used the solution “from_yaml” provided by Vladimir and it works like a charm, and it’s also cleaner. However, if this is the case, I don’t believe this is an issue of how ternary works, but of how “from_json” works. My gut feeling is that it shouldn’t behave that way.