Основная цель такого поста не показать единственный способ "как правильно" (такого нет), а поделиться моим опытом, из которого вы можете подцепить какую-нибудь идею и реализовать у себя.
В общем, конечно же, я делаю это через ansible. У меня есть довольно сильно параметризируемая роль
backups. В директории files я складываю bash-скрипты в сыром виде. Можно их там разбить на под-директории, чтобы было больше порядка.В инвентори у нужных хостов я описываю бекап по следующей структуре:
backups: # список - можем описать несколько бекапов
- name: billing_db_backup
user: root # под каким юзером запускаем
scripts:
- script: billing_db_backup.sh # название скрипта из files
script_dest: /etc/billing/scripts # куда положить скрипт
schedule: { hour: 2, minute: 30 } # cron-расписание
job: /etc/billing/scripts/billing_db_backup.sh # cron-команда
create_dir: # если нужно создать директории
- path: /etc/billing/scripts
mode: '0750'
- path: /var/lib/billing/backups
mode: '0700'
env:
PGPASSWORD: >-
{{ длинный и некрасивый lookup, чтобы забрать пароль из Infisical }}
Что роль сделает:
- создаст директории
- скопирует скрипт как есть
- срендерит env файлик с паролем из Infisical (в скрипт надо добавить
. env)- добавит расписание в cron
Почему скрипты в
files, а не в templates? Потому что некоторые скрипты могут конфликтовать с рендером Jinja который используется в шаблонах. Надежнее их положить в files в том виде, в котором они есть и попадут на машину.