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

时间:2017-12-08 07:21:56

标签: 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

在上面的代码中,groups[MY_HOSTNAME]是一个数组。检查groups[MY_HOSTNAME]是否已定义以及not empty的最佳方法是什么? 如果是其中之一,我希望将值00.00.00.00分配给MY_SERVER

2 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:9)

list | length过滤器返回元素数量。如果为零,则列表为空。

对于条件值,请使用ifternary过滤器(example in this answer)。

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