Запуск Ansible l oop в обратном направлении - PullRequest
0 голосов
/ 23 января 2020

Я работаю над ansible playbook и в одной игре пытаюсь удалить некоторые узлы, используя свой собственный модуль (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 }}"

Это прекрасно работает, если я удаляю его в прямом порядке. Как мне запустить мой "L oop" в обратном порядке? Я хочу начать удаление узлов в обратном порядке. Пробовал что-то вроде этого, но это не работает

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

Даже пробовал это, но тоже не получается

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

Не удалось найти в документе Ansible ничего, что обращалось бы к обратной петле.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Q: «Как запустить мой loop в обратном порядке?»

A: Использовать reverse filter. Например

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

дает

    "item": "eth2"
    "item": "eth1"
    "item": "eth0"
0 голосов
/ 23 января 2020

Надеюсь, этот фрагмент будет для вас:

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

- name: reverse
  debug: msg="{{arr[item-1]}}"
  loop: "{{ke}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...