и какое-то количество из них работает с одной и той же переменной, но переменная это список (условно, один таск создает директорию с названием переменной, второй по шаблону создает файл, внутри у которого используется эта переменная ), то как правильно описать плейбук?
Я сейчас сделал в таком виде:
- hosts: all
tasks:
- name: install nginx
apt:
name: nginx=1.18.0-*
- name: copy nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
- name: create folders for virtual hosts nginx
file:
path: /var/www/{{ item }}
state: directory
loop:
- site1.192.168.1.2.nip.io
- site2.192.168.1.3.nip.io
- site3.192.168.1.4.nip.io
- name: copy index.html to site folder
template:
src: index.html.j2
dest: /var/www/{{ item }}/index.html
loop:
- site1.192.168.1.2.nip.io
- site2.192.168.1.3.nip.io
- site3.192.168.1.4.nip.io
Но мне кажется, что должен быть более элегантный способ, чем каждый раз этот loop повторять со всем списком.
Можно наверно запихнуть сам список в var и подставлять его как переменную в loop, но все же интересно, верен ли сам подход?
Можно список в переменную, и/или можно эту пару тасков вынести в отдельный файл и в луп поместить include_tasks с ним. Имхо ради двух тасок достаточно просто вынести в переменные.
Ну то есть принципиально других подходов нет?
Не, почему же. Есть. Хотите - можно нагенерить все файлы заранее на контроллере и потом через copy прямо директориями скопировать на таргет. Если их много - то будет не очень быстро. Можно файлы нагенерить и запаковать. И в плейбуке передавать архив и распаковывать на таргете.
Я про саму концепцию - либо луп для каждого таска, либо несколько тасков в файл и инклюд_таскс.
Да, к сожалению или счастью только так :)
А я бы сказал - задача слишком эфемерная. Если это реально nginx и большой конфиг - проще и быстрее держать конфиг в одном файле. А директории создать на этапе деплоя кода на сервер… Вы же ведь не будете n сайтов такими шаблонами на сервер заливать… Ну а если это просто на поиграться - то loop самое оно
Поиграться - поучиться
Тогда подход норм
Обсуждают сегодня