Ansible Перечислите переменную и выберите Фильтр, чтобы игнорировать совпадающие элементы - PullRequest
1 голос
/ 17 марта 2020

У меня есть переменная dir_lst_raw в ansible playbook со значением список , как показано ниже:

"dir_lst_raw": [
        "/path1/dir1/user",
        "/path2/dir2/admin",
        "/path3/dir3/user.ansible_backup_2020-03-16",
        "/path1/dir1/config.ansible_backup_2020-03-16",
        "/path2/dir2/dir3/somefile"
      ]

Мне нужно удалить все строки, содержащие .ansible_backup_ и сохранить в другую переменную в виде списка . Я прибегнул к поиску регулярных выражений и попытался не сопоставить шаблон с фильтром выбора , как показано ниже:

  - set_fact:
      dir_lst: "{{ dir_lst_flt_r | select('match','(^.ansible_backup_)+') | list }}"

, но новая переменная dir_lst оказалась пустым списком. Я ожидаю dir_lst, как показано ниже:

"dir_lst_raw": [
        "/path1/dir1/user",
        "/path2/dir2/admin",
        "/path2/dir2/dir3/somefile"
     ]

Может кто-нибудь подсказать, как мне это сделать?

1 Ответ

1 голос
/ 17 марта 2020

Задание ниже выполняет работу

    - set_fact:
        dir_lst: "{{ dir_lst_raw|reject('match', my_regex)|list }}"
      vars:
        my_regex: '^(.*)\.ansible_backup_(.*)$'
    - debug:
        var: dir_lst

дает

    "dir_lst": [
        "/path1/dir1/user", 
        "/path2/dir2/admin", 
        "/path2/dir2/dir3/somefile"
    ]
...