反向运行 Ansible 循环

问题描述 投票:0回答:2

我正在编写一本 ansible playbook,在一次 play 中,我尝试使用 UUID 使用我自己的模块(NodeModule)删除一些节点。所有节点是一个包含节点 UUID 的列表。

- name: Remove OSNs
  NodeModule:
    connection:
      ip: "{{ ansible_default_ipv4.address }}"
    action: remove_node
    id: "{{ all_nodes[(item)] }}"
  loop: "{{ range(0, all_nodes|length, 1)|list }}"

如果我按正向顺序删除它,效果会非常好。我怎样才能以相反的顺序运行我的“循环”?我想开始反向删除节点。尝试过类似的方法,但它不起作用

loop: "{{ range(all_nodes|length, 0, -1)|list }}"

即使尝试过,但也失败了

Loop: "{{ range(0, all_nodes|length, 1)|reverse|list }}"

在 Ansible 文档中找不到任何解决反向循环的内容。

ansible
2个回答
6
投票

问:“如何以相反的顺序运行循环?”

A:使用过滤器reverse。例如,

- hosts: localhost

  vars:

    all_nodes: [eth0, eth1, eth2]

  tasks:

    - debug:
        var: item
      loop: "{{ all_nodes | reverse }}"

给出(删节)

  item: eth2
  item: eth1
  item: eth0

1
投票

我希望这个片段适合您:

- set_fact:
    arr:
      - a
      - b
      - c
      - d
      - e
    ke: "{{ range(5, 0, -1) | list }}"   

- name: reverse
  debug: msg="{{arr[item-1]}}"
  loop: "{{ke}}"
© www.soinside.com 2019 - 2024. All rights reserved.