'Check if arrays are defined and not empty in ansible
I have the following code
- set_fact:
MY_HOSTNAME: "SOME VALUE"
MY_SERVER: "00.00.00.00"
- name: Get MY server
set_fact:
MY_SERVER: "{{ groups[MY_HOSTNAME][0] }}"
when: groups[MY_HOSTNAME] is defined
In the above code, groups[MY_HOSTNAME]
is an array. What is the best way to check that groups[MY_HOSTNAME]
is defined and also that it is not empty
If it is either of that I want the value 00.00.00.00
to be assigned to MY_SERVER
Solution 1:[1]
I don't know if it's version specific, but I'm currently running ansible-2.3.2 on RHEL6 and I had to put quotes around the group name to get it to work for me:
when: groups["GROUP_NAME"] is defined and (groups["GROUP_NAME"]|length>0)
Edit: I couldn't add this as a comment to techraf's answer because I don't have enough reputation.
Solution 2:[2]
list | length
filter returns the number of elements. If it is zero, the list is empty.
For a conditional value use if
or ternary
filter (example in this answer).
For a composite conditional (groups[MY_HOSTNAME]| default([])) | length
.
Solution 3:[3]
You can first check if it is indeed a list and then check if it has more than one element:
when: (groups['MY_HOSTNAME'] is defined) and (groups['MY_HOSTNAME'] | type_debug == 'list') and (groups['MY_HOSTNAME'] | length > 0)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | stackprotector |