如何在Ansible中实现s0到s60、s100到s110的序列循环
实现方案
你可以直接借助Ansible内置的Jinja2模板语法的range函数和过滤器批量生成序列,完全不需要手动逐个枚举所有值,核心是利用左闭右开的区间规则拼接两个目标范围的序列即可。
优化后完整代码
- name: "Network scan at port 22 {{ nom_base }}" when: inventory_hostname in groups['exos_switch'] wait_for: port: 22 host: "{{ nom_base }}-{{ item }}" state: started timeout: 2 # 直接批量生成s0-s60、s100-s110的序列 with_items: "{{ (range(0, 61) | map('string') | map('format', 's%s') | list) + (range(100, 111) | map('string') | map('format', 's%s') | list) }}"
语法说明
range(0,61):生成0到60的整数序列(range为左闭右开规则,上限写61才会包含60)map('string'):把生成的整数全部转为字符串类型map('format', 's%s'):给每个字符串前面拼接s前缀- 两个区间的生成结果用
+拼接合并后直接作为遍历列表
更易维护的写法(可选)
如果后续需要经常调整范围,建议把序列生成逻辑抽到vars变量里,可读性更高:
vars: scan_range: "{{ (range(0, 61) | map('string') | map('format', 's%s') | list) + (range(100, 111) | map('string') | map('format', 's%s') | list) }}" tasks: - name: "Network scan at port 22 {{ nom_base }}" when: inventory_hostname in groups['exos_switch'] wait_for: port: 22 host: "{{ nom_base }}-{{ item }}" state: started timeout: 2 with_items: "{{ scan_range }}"
内容的提问来源于stack exchange,提问作者Benoit
相关产品推荐
相关产品推荐

