В Ansible, как применить скалярный фильтр к списку - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу применить ANSIBLE фильтр к каждому элементу в списке, а затем создать строку из него.Допустим, у меня есть список

my_files:
    - /etc/passwd
    - /etc/group

И затем в задании, требующем ответа, я хочу создать строку типа «passwd, group».Без фильтрации это можно сделать с помощью синтаксиса jinja

{{ ",".join(my_files) }}

, который создаст строку "/ etc / passwd, / etc / group".Но теперь я хочу применить фильтр ansible basename к каждому элементу.Для скаляра это работает как

{{ /etc/passwd | basename }}

, который генерирует строку "passwd".Итак, вопрос в том, как объединить эти две операции для генерации строки «passwd, group» из списка my_files?

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете использовать шаблон уменьшения карты для достижения этой цели.Сначала вы должны отобразить каждую запись, используя фильтр basename, а затем присоединиться к результирующему списку.

Следующая книга воспроизведения демонстрирует, как это можно сделать:

- hosts: localhost
  gather_facts: false
  vars:
    my_files:
      - /etc/passwd
      - /etc/group

  tasks:
    - name: MapReduce
      debug:
        msg: "{{ my_files | map('basename') | list | join(',')}}" # results in passwd,group
...