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
我很难弄清楚我的 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