Ansible 当条件变量和项目

Ansible when conditional with variable and item

我很难弄清楚我的 Ansible 剧本有什么问题。

我有一堆任务,根据上下文定义或不定义一些变量,根据结果,某些任务将被忽略或不被忽略。

对于这种特定情况,我会检查 VlanID 是否已存在,如果不存在,我会创建一个,然后从结果中检索新的 VlanID。

这是剧本:

---
#Tasks for portGroup_add
- name: Get all portgroups in dvswitch vDS
  community.vmware.vmware_dvs_portgroup_find:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    dvswitch: "{{ vcenter_dvSwitch }}"
    validate_certs: False
  register: portGroup_infos
  when: (OLD_VLANID is not defined) or (OLD_VLANID|length < 1)

  #Get last VLAN ID for HDS client, and set VLANID + 1
- name: get portGroup_infos
  set_fact:
    VLANID: "{{ item.vlan_id }}"
  with_items: "{{ portGroup_infos.dvs_portgroups}}"
  when:
    - (portGroup_infos is defined) and (portGroup_infos|length > 0)
    - item.name | regex_search("\(HDS :\s*")

虽然大多数任务都运行良好,但此任务会引发以下错误:

The conditional check 'item.name | regex_search("\(HDS :\s*")' failed. 
The error was: error while evaluating conditional (item.name | regex_search("\(HDS :\s*")): 'item' is undefined

这很明显,因为字典 portGroup_infos 没有定义。

为了获得新的 VlanID,我使用了“when”conditionnal,它检查项目中是否存在值“(HDS :”)。

但是如果没有设置上面定义的 portGroup_infos 变量,我不想启动任务,虽然我应该使用嵌套的“when”,但不能成功。

Ansible 版本:2.10.7 python 版本:3.7.3

感谢您的帮助。

将两个任务放在一个块中,例如

- block:
    - name: Get all portgroups in dvswitch vDS

      ...

    - name: get portGroup_infos

      ...

  when: OLD_VLANID|default('')|length == 0