首页 > 解决方案 > 反向运行 Ansible 循环

问题描述

我正在编写一个 ansible 剧本,在一个剧本中,我试图使用我自己的模块(NodeModule)使用 UUID 删除一些节点。所有节点是一个具有节点 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

解决方案


问:我怎样才能以相反的顺序运行我的循环?

A:使用反向过滤器。例如

- hosts: localhost
  vars:
    all_nodes: ['eth0', 'eth1', 'eth2']
  tasks:
    - debug:
        var: item
      loop: "{{ all_nodes|reverse|list }}"

    "item": "eth2"
    "item": "eth1"
    "item": "eth0"

推荐阅读