检查ansible中是否定义了数组且数组不为空

检查ansible中是否定义了数组且数组不为空,ansible,ansible-facts,Ansible,Ansible Facts,我有以下代码 - 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 在上面的代码中,组[MY_HOSTNAME]是一个数组。检查组[MY_HOSTNAME]是否已定义,以及

我有以下代码

- 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
在上面的代码中,
组[MY_HOSTNAME]
是一个数组。检查
组[MY_HOSTNAME]
是否已定义,以及
是否为空的最佳方法是什么

如果是其中之一,我希望将值
00.00.00.00
分配给
MY_SERVER
list | length
过滤器返回元素数。如果为零,则列表为空

对于条件值,请使用
if
三值过滤器()


对于复合条件
(组[MY_HOSTNAME]|默认([])|长度
),我不知道它是否是特定于版本的,但我目前正在RHEL6上运行ansible-2.3.2,我必须在组名周围加上引号才能使它对我起作用:

when: groups["GROUP_NAME"] is defined and (groups["GROUP_NAME"]|length>0)

编辑:我无法将此作为评论添加到techraf的回答中,因为我没有足够的声誉。

有没有办法同时检查它是否未定义且不为空?您尝试了什么?您遇到了什么问题?我尝试了
组[MY_HOSTNAME]的定义和组[MY_HOSTNAME]| length>0
,但似乎不起作用“似乎不”看起来像什么?谢谢。。。但我仍然对len(foo)(Python检查长度的方法)不起作用感到沮丧。请注意:
|length
也适用于字符串。如果输入是一个字符串而不是数组,它将简单地返回字符串的长度