Извлечение последней записи из массива с условием в ansible

#ansible

#ansible

Вопрос:

У меня есть массив записей в ansible следующим образом,

[ ami-abc;2020-11-08;false
ami-cdf;2020-11-09;false
ami-123;2020-11-10;false
ami-456;2020-11-11;true ]

Я хочу пропустить все записи со значением конечного поля, равным true, а затем получить последнюю запись, значение конечного поля которой равно false (в этом случае нужной мне записью будет «ami-123;2020-11-10; false». Может кто-нибудь, пожалуйста, дать мне совет, как это сделать? Я пробовал несколько способов, но, к сожалению, ничего не работает.

Спасибо.

С уважением, Андрей

Комментарии:

1. Привет, Эндрю. Добро пожаловать сюда. Можете ли вы обновить вопрос своей попыткой (» количество способов «, которые вы попробовали)?

2. Не могли бы вы, пожалуйста, перепроверить и в конечном итоге обновить данные вашего примера? Это не похоже на действительный список ни в формате json, ни в формате yaml.

Ответ №1:

Фильтр может использоваться для выбора элементов, соответствующих вашему регулярному выражению, и во вновь созданном списке последний элемент может быть выбран с помощью [-1]

 ---
- name: Test stackoverflow
  hosts: localhost
  vars:
    stacklist:
      - ami-abc;2020-11-08;false
      - ami-cdf;2020-11-09;false
      - ami-123;2020-11-10;false
      - ami-456;2020-11-11;true
    searchstring: "^(.*)false$"

  tasks:
  - name: Create a list of matching false elements
    set_fact:
      falselist: "{{ stacklist | select('match',searchstring) | list }}"

  - name: Debug the last item in the list
    debug:
      msg: "{{ falselist[-1] }}"
  

Комментарии:

1. Привет, Георгий, большое спасибо за ваше предложение. Это работает отлично!

2. @AndrewLeung мне было приятно внести свой вклад!