You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:06:03