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

kos*_*sta 12 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
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,groups[MY_HOSTNAME]是一个数组.什么是检查groups[MY_HOSTNAME]定义的最佳方法,并且它是否是not empty 如果它是我想要00.00.00.00分配值的任何一个MY_SERVER

Phi*_*l M 16

我不知道它是否特定于版本,但我目前在RHEL6上运行ansible-2.3.2并且我必须在组名称周围加上引号以使其适用于我:

when: groups["GROUP_NAME"] is defined and (groups["GROUP_NAME"]|length>0)
Run Code Online (Sandbox Code Playgroud)

编辑:我无法将此添加为对techraf答案的评论,因为我没有足够的声誉.

  • 小心这个:`| length` 也适用于字符串。如果输入是字符串而不是数组,它将仅返回字符串的长度 (2认同)

tec*_*raf 11

list | lengthfilter返回元素的数量.如果为零,则列表为空.

对于条件值使用ifternary过滤(本答案中的示例).

对于复合条件(groups[MY_HOSTNAME]| default([])) | length.

  • 我试过定义了`groups[MY_HOSTNAME] 和groups[MY_HOSTNAME] | 长度 > 0`,但它似乎不起作用 (2认同)
  • “好像没有”怎么看? (2认同)