Ansible中如何比较整数列表与数值,输出大于15的元素?
解决Ansible列表筛选大于15元素的问题
原代码问题分析
when条件写法错误:when语句无需用{{}}包裹变量,且直接将列表与整数比较逻辑不成立——列表是多元素集合,无法和单个整数直接对比。msg表达式无效:{{greater than 15}}不是合法的Ansible模板表达式,无法被解析。- 拼写错误:
set fatc应为set_fact。
正确Playbook实现
方式1:逐个输出符合条件的元素
tasks: - name: 创建字符串列表变量 set_fact: Continents: ["10","20"] - name: 将字符串列表转换为整数列表 set_fact: int_list: "{{ Continents | map('int') | list }}" - name: 筛选并输出大于15的元素 debug: msg: "{{ item }} greater than 15" loop: "{{ int_list | select('>', 15) | list }}"
方式2:统一输出提示(仅当存在符合条件元素时)
tasks: - name: 创建字符串列表变量 set_fact: Continents: ["10","20"] - name: 转换为整数并筛选大于15的元素 set_fact: filtered_list: "{{ Continents | map('int') | select('>', 15) | list }}" - name: 输出结果 debug: msg: "greater than 15" when: filtered_list | length > 0
代码说明
map('int'):将列表中的字符串元素转换为整数类型。select('>', 15):筛选出列表中大于15的元素。loop:遍历筛选后的列表,逐个输出符合条件的元素提示;或通过判断筛选后列表的长度,在有符合条件元素时输出统一提示。
内容的提问来源于stack exchange,提问作者user10109375
相关产品推荐
相关产品推荐

