如何统计循环运行且未被跳过的次数?

1 投票
2 回答
68 浏览
提问于 2025-04-14 16:35

我正在尝试运行(类似的东西),想弄清楚这个循环实际上运行了多少次。

- name: this step
  debug:
    msg: "working on {{ item.name }}"
  when: not item.skip
  with_list: 
    - {name: t1, skip: True}
    - {name: t2, skip: False}
    - {name: t3, skip: False}
    - {name: t4, skip: False}
    - {name: t5, skip: True}

在这个简化的版本中,我想得到3。

  register: somedata

- debug:
    msg: "{{ somedata.results | length }}"

2 个回答

1

这会是这样吗:

- name: this step
  debug:
    msg: "working on {{ item.name }}"
  when: "not item.skip"
  with_items:
    - { name: t1, skip: True }
    - { name: t2, skip: False }
    - { name: t3, skip: False }
    - { name: t4, skip: False }
    - { name: t5, skip: True }
  register: loop_results

- name: print number of iterations
  debug:
    msg: "{{ loop_results.results | length }}"
1

假设你有一个叫 loop_results 的变量,计算一下有多少个项目被跳过了。

    skip: "{{ loop_results.results |
              json_query('[?skipped]') |
              length }}"

计算一下这个循环总共运行了多少次。

    run: "{{ loop_results.results|length - skip|int }}"

这是一个完整的测试手册示例。

- hosts: all

  vars:

    skip: "{{ loop_results.results |
              json_query('[?skipped]') |
              length }}"
    run: "{{ loop_results.results|length - skip|int }}"

  tasks:

    - debug:
        msg: "working on {{ item.name }}"
      loop:
        - {name: t1, skip: True}
        - {name: t2, skip: False}
        - {name: t3, skip: False}
        - {name: t4, skip: False}
        - {name: t5, skip: True}
      register: loop_results
      when: not item.skip

    - debug:
        var: loop_results
    - debug:
        var: skip
    - debug:
        var: run

提供的内容(简化版)

  skip: '2'
  run: '3'

撰写回答