Что такое конфиг-агент? Это такой механизм, который держит конфиги на сервере в актуальном состоянии. К примеру какой-нибудь
Ты спросишь?
В этом случае нас спасет конфиг-агент, который автоматически придет через минуту, заберет эталонные конфиги из git, всё красиво восстановит и передернет на Билли Айлиш.
Ясно дело можно через ansible и puppet все это провернуть, но слишком избыточно, это то же самое, что поднять kubernetes и крутить в нем личный бложек на wordpress, ну такое…
Не унывай, выход есть! Это можно реализовать за несколько минут и потом снова пару недель пинать
Как я раньше и сказал, есть некий git репозиторий где хранятся все эталонные конфиги. Все изменения в конфигах производятся через этот репозиторий.
На примере покажу как мониторить nginx конфиги и сделать простенький агент. Дальше уж сам свой велосипед под свои реалии запилишь.
Практика (упрощаю до минимума, чтобы ты понял смысл)
Закидываем файл
/usr/local/sbin/config-agent.sh делаем ему chmod +x (чтобы он был исполняемым) и ставим его в крон */1 * * * *
#!/bin/bash
DIR=/tmp/nginx-configs
if [ ! -d "$DIR" ];
then
git clone git@git.bashdays.ru:dev/nginx-configs.git /tmp/nginx-configs
fi
cd /tmp/nginx-configs && git pull --quiet
RSYNC=$(rsync -aizh /tmp/nginx-configs/ /etc/nginx)
if [ $? -eq 0 ]; then
if [ -n "${RSYNC}" ]; then
systemctl reload nginx
fi
else
exit 0
fi
Давай смотреть что тут происходит:1. Создаем отдельную папку если ее нет в /tmp
2. Клонируем в нее эталонные конфиги с git репозитория
3. Переходим в папку и забираем последние изменения
4. С помощью rsync, синкаем эталон в папку /etc/nginx
5. Если файлы заменились в /etc/nginx то делаем reload
Всё!
Знак
$? используется для поиска возвращаемого значения последней выполненной команды. Теперь у нас есть полный контроль от кривых рук. Ну а чтобы изменить какой-то конфиг, нужно заморочиться и сделать это через git репу со всеми вытекающими кодревью и т.п.
Как говорится - на bash’ке моей горшок, а в кармане пирожок!
Всем хорошего понедельника коллеги!
tags: #bash
—
🟢 Подпишись: @bashdays