Ansible循环when条件字符串变量对比失败导致任务跳过问题求助
问题根因
- when条件语法错误:Ansible的
when字段会自动解析Jinja2表达式,不需要额外加{{ }}定界符,额外添加会导致表达式解析异常,条件判断失效。 - 匹配逻辑错误:
ansible_devices[item]是存储设备属性的字典对象,你写的in判断是校验字符串是否属于字典的键名,而非匹配设备名称或者设备属性中的字符串,逻辑完全不符合预期。
修复方案
根据你的实际匹配需求二选一即可:
方案1:匹配设备名称(即item返回的nvme1n1这类设备名)包含目标字符串
修正后的任务配置如下:
#MDM RAID0 All available free unmounted devices - name: "Perform MDM Raid0 on all qualifying available devices on any cpu node" include_tasks: file: pfm_all_available_devices_mdm.yml apply: tags: pfm_all_available_devices_mdm when: device_pattern in item with_items: "{{ ansible_devices }}"
方案2:匹配设备属性(比如型号、控制器信息)包含目标字符串
如果需要匹配设备属性内的内容,比如model、host字段,建议额外加上大小写转换避免大小写不匹配问题,示例如下:
# 匹配设备型号中包含目标字符串,大小写不敏感 when: device_pattern | lower in ansible_devices[item].model | lower
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

