# Patroni GitOps Config Manager ### Назначение роли Эта роль предназначена для безопасного управления конфигурацией кластера Patroni. Она предоставляет следующие возможности: - Создание резервных копий текущей конфигурации с timestamp - Валидация изменений конфигурации перед применением - Наглядное отображение различий между текущей и новой конфигурацией - Безопасное применение изменений через REST API Patroni - Проверка состояния кластера после изменений - Уведомление о необходимости перезагрузки нод (если требуется) - Автоматическое управление историей конфигурационных файлов ### Требования - Ansible 2.9+ - Доступ к Patroni REST API (порт 8008) - Python 3 для валидации YAML - Утилита diff с поддержкой цветного вывода ### Переменные роли Основные переменные, которые можно переопределить: - config_dir (по умолчанию: "/ansible/history") - директория для хранения истории конфигураций - config_file (по умолчанию: "/ansible/patroni_config.yaml") - путь к файлу с изменениями конфигурации - patroni_host (по умолчанию: "10.14.0.180") - хост кластера Patroni ### Как внести изменения в конфиг кластера? 1. Для начала создайте новый branch по имени кластера. ```bash # Переключиться на основную ветку (если нужно) git checkout main # Получить последние изменения git pull origin main # Создать новую ветку cluster/name git checkout -b cluster/name ``` # Отправить ветку в удалённый репозиторий git push -u origin feature/login ``` 2. Внесите изменения в файл **patroni_config.yaml**. Все изменения буду добавлены в конфиг кластера. Если такие переменные в конфиге существуют, они будут заменены. Если переменных нет, будут добавлены. Создайте файл изменений (пример `patroni_config.yaml`): ```yaml postgresql: parameters: max_connections: 300 shared_buffers: "12GB" use_pg_rewind: true ``` ### Анализ результатов После выполнения этапа подготовки: - Будет показан цветной diff изменений - В директории config_dir появятся: - Резервная копия текущей конфигурации с timestamp - Файл last.yaml с новой конфигурацией После выполнения этапа применения: - Будет выведен статус кластера - Появится предупреждение, если требуется перезагрузка нод - Старые конфигурации будут автоматически удалены (остаются последние 10) ### Особенности работы Безопасность: - Конфигурация всегда сохраняется перед изменениями - Изменения проверяются на валидность перед применением - Показывается подробный diff перед применением Информирование: - Явное предупреждение о необходимости перезагрузки - Подробный вывод статуса кластера после изменений - Сохранение истории изменений Автоматизация: - Управление историей конфигураций (автоочистка старых файлов) - Проверка состояния кластера после изменений ### Важные примечания - Роль не выполняет автоматическую перезагрузку нод Patroni, так как это потенциально опасная операция - При необходимости перезагрузки будет показана команда для ручного выполнения - Все изменения конфигурации сохраняются с timestamp для возможности отката - Для работы требуется доступ к API Patroni (порт 8008) ### С чего начать? На вашей машине вам необходимо сбилдить образ, где будут запускаться все роли через docker-compose. Это можно сделать самостоятельно: - **make docker build** - создание контейнера - **make docker rebuild** - пересоздание контейнера, если были внесены изменения в Dockerfile - **make docker prune** - очистить систему от лишних образов - **make docker shell** - войти в контейнер Shell - **make docker release** - собирает образ контейнера и пушит его в докер реджистри - **make docker images** - собрать образы контейнеров с systemd, для удобного тестирования ролей. Или ввести команду: - **make init** - которая создаст файл секретов с паролем. Сбилдит образ. И создаст новую роль. ### Работа с ролью - **make role new** - создать новую роль из шаблона. Название роли пишется на английском, описание роли на любом языке - **make role lint** - проверяет все роли в папке roles/* на наличие ошибок - **make role test** - позволяет тестировать роль, указанную в molecule/default/converge.yml сразу на двух контейнерах (RedHat и Ubuntu) - **make role deploy** - запускает роль в продакшен. Все хосты берет из файла inventory/hosts ### Работа с файлом переменных Все переменные защищены через **Ansible-Vault** и находятся в папке vars/secrets.yml Для смены пароля измените его в файле **./vault-password.txt** - **make vault create** - создать новый файл с учетом пароля в файле **./vault-password.txt** - **make vault delete** - удалить файл с переменными - **make vault edit** - отредактировать файл переменных - **make vault show** - показать содержимое файла переменных - **make vault rekey** - сменить пароль шифрования - **make vault encrypt** - зашифровать файл секретов - **make vault decrypt** - расшифровать файл секретов ### Работа с Git - **make git push** - запушить изменения. С выбором ветки и вводом коммита. - **make git pull** - получить изменения из репы - **make git new** - создание нового брэнча имя cluster-branch_name для IaC подхода. ### Добавить свой образ контейнера для тестов Что бы добавить или изменить докер-образы для тестирования ролей измените файл настроек молекулы molecule/default/molecule.yml ```yaml - name: ubuntu-instance image: "your.docker-registry.com/your-image:latest" privileged: true pre_build_image: true volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro ``` Помните, что образ обязательно должен содержать python не ниже версии 3.12 и systemd для нормального тестирования ролей.