Ansible: with_fileglob – копирование нескольких шаблонов из директории

By | 09/10/2018
 

Необходимо скопировать пачку файлов – задач для supervisord.

В Ansible используем with_fileblob:

...
- name: "Copy supervisor tasks"
  template:
    src: "{{ item }}"
    dest: "/etc/supervisor/conf.d/{{ item | basename | regex_replace('.j2','') }}"
    owner: "root"
    group: "root"
    mode: 0644
  with_fileglob:
    - templates/*.j2
...

С помощью фильтра basename – получаем имя файла из {{ item }}, а с помощью regex_replace – вырезаем из его имени .j2.

Шаблоны выглядят так:

ls -l roles/supervisor/templates/
total 100
-rw-r--r-- 1 setevoy setevoy 740 Sep 10 13:16 proj1-instant-article-worker.conf.j2
-rw-r--r-- 1 setevoy setevoy 668 Sep 10 13:15 proj1-jwplayer.conf.j2
...
-rw-r--r-- 1 setevoy setevoy 644 Sep 10 13:14 proj2-update-worker.conf.j2
-rw-r--r-- 1 setevoy setevoy 583 Sep 10 13:14 proj2-ws.conf.j2

Запускаем задачу:

...
changed: [production.master.dme.example.world] => (item=/home/setevoy/Work/devops/projects/dme/roles/supervisor/templates/proj1-jwplayer.conf.j2)
changed: [production.master.dme.example.world] => (item=/home/setevoy/Work/devops/projects/dme/roles/supervisor/templates/proj2-instant-article-worker.conf.j2)
changed: [production.master.dme.example.world] => (item=/home/setevoy/Work/devops/projects/dme/roles/supervisor/templates/proj3-instant-article-worker.conf.j2)
...

Проверяем файлы:

root@dme-production-master:/data# ls -l /etc/supervisor/conf.d/
total 20
-rw-r--r-- 1 root root 713 Sep 10 13:30 proj1-instant-article-worker.conf
-rw-r--r-- 1 root root 642 Sep 10 13:30 proj2-jwplayer.conf
-rw-r--r-- 1 root root 704 Sep 10 13:30 proj3-instant-article-worker.conf
-rw-r--r-- 1 root root 686 Sep 10 13:31 proj4-jwplayer_worker.conf
-rw-r--r-- 1 root root 699 Sep 10 13:31 proj5-instant-article-worker.conf
...

И статус супервизора:

root@dme-production-master:/data/dme# supervisorctl status
...
proj1-ws                            RUNNING   pid 11946, uptime 0:25:20

Готово.