Pull to refresh

Автоматизация работы *nix системного администратора

Reading time 3 min
Views 2.6K
О ssh и системных администраторах:

С давних пор *nix системные администраторы используют ssh для удаленного управления серверами.
Некоторые из них делают себе готовые наборы скриптов для обновлений софта, раскладки из репозитория, и так далее.
До определенных размахов бедствия можно обходить парк машин одну за одной. Однако рано или поздно парк машин вырастет до вполне себе солидных размеров и тогда простейшая раскладка по фронтэндам новых скриптов становится головной болью нескольких часов.

Вот здесь вот и начинается самое интересно:
одни системные администраторы запускают свои скрипты в несколько потоков, другие придумывают как отмазаться от части машин.


SSH robot:

Долгое время я использовал его только для своих нужд в mail.ru, потом долгое время у меня не было большого зоопарка машин и вот теперь он снова понадобился. Эта версия была за последние 3 недели полностью переписана с нуля:

Последняя стабильная версия:
http://myau.su/robot-0.2.5.tgz

Последняя стабильная версия из репозитория:
svn co svn://myau.su/robot/tags/robot-0.2.5 robot

Транк:
svn co svn://myau.su/robot/trunk robot

Список того что потребуется для сборки и как собирать можно найти в папке doc.

На выходе получите 2 бинаря:
passfile — для генерации зашифрованного файла с паролями
robot — собственно сам робот

Немножко о том чему робот уже обучен:

1) Асинхронно выполнять скрипты на машинах
2) Загружать / скачивать файлы посредством ssh(sftp)
3) Проверять exit code
4) Ждать заданную строку после выполнения команды
5) Группировать машины и исполнять разные скрипты для разных групп
6) Отображать прогресс и вывод с машин
7) Использовать зашифрованный файл с паролями

Автоматизируемся:


Сейчас мы рассмотрим несколько простых примеров без использования зашифрованного файла паролей. Полная документация по синтаксису макрос файлов есть в папке doc там же и все остальное.

1) Обновление web-скриптов с перезапуском апача:

Первое что нам понадобится это описать какие машины у нас есть и как с ними соединяться:

@host {
@user = user_zero # пользователь по умолчанию для всех хостов
@pass = password_zero # пароль по умолчанию для всех хостов

192.168.0.1
192.168.0.2
user_2@192.168.0.3 # а вот тут вот у нас уже другой пользователь
user_2:pass2@192.168.0.4 # а тут еще и пароль отличается
192.168.0.5
192.168.0.6
}


Просто лаконично и красиво )
Теперь давайте опишем 2 разные группы, потому что путь до каталога со скриптами там разный:

@group path_1 {
192.168.0.1
192.168.0.2
192.168.0.3
}

@group path_2 {
192.168.0.4
192.168.0.5
192.168.0.6
}


Обратите внимание что логин и пароль здесь не пишутся только имя хоста.

А теперь сами скрипты:

@script path_1 {
command su # Хочу быть владычицей морской
expect Password # ждем пока нас спросят о пароле
command MegArOooOtPas$ # вводим его
exitcode 0 # ждем экзит кода
command cd /path_to_www1/ # идем туда куда надо
exitcode 0 #ждем экзит кода
command svn up # обновляем код
exitcode 0 #ждем экзит кода
command /etc/init.d/apache restart # перезапуск апатча
exitcode 0 #ждем экзит кода
}

@script path_2 {
command su
expect Password
command MegArOooOtPas$
exitcode 0
command cd /path_to_www2/ # для этой группы путь другой
exitcode 0
command svn up
exitcode 0
command /etc/init.d/apache restart
exitcode 0
}


Вот так вот: сначала будет обновлена группа 1 потом группа 2.

2) загрузка файлов и обновление криптов с перезапуском апача:

Возьмем набор групп и хостов из прошлого примера и напишем к ним новый скрипт:

@script path_1 {
command su # Хочу быть владычицей морской
expect Password # ждем пока нас спросят о пароле
command MegArOooOtPas$ # вводим его
exitcode 0 # ждем экзит кода
upload local_code.tgz /tmp/remote.tgz
command cd /path_to_www1/ # идем туда куда надо
exitcode 0 #ждем экзит кода
command tar xzpf /tmp/remote.tgz # обновляем код
exitcode 0 #ждем экзит кода
command /etc/init.d/apache restart # перезапуск апатча
exitcode 0 #ждем экзит кода
}

@script path_2 {
command su
expect Password
command MegArOooOtPas$
exitcode 0
upload local_code.tgz /tmp/remote.tgz
command cd /path_to_www2/ # для этой группы путь другой
exitcode 0
command tar xzpf /tmp/remote.tgz
exitcode 0
command /etc/init.d/apache restart
exitcode 0
}


вот так вот просто и быстро можно решать объемные задачи в короткие сроки,
кстати попробуйте на досуге сделать тоже самое мышкой на 10 win машинах.

От автора(catdog):

Сайта программы пока нету и вряд ли у меня есть на него время, однако багфиксы и улучшения по мере возникновения будут выкладываться в репозиторий. Так же если у вас есть замечания и предложения то пишите мне на мыло в профиле. Кармы у меня не хватает на публикацию так что ищите обновления вот тут вот:

svn.myau.su/listing.php?repname=robot

в tags находятся стабильные версии в trunk нестабильная.
Tags:
Hubs:
+52
Comments 46
Comments Comments 46

Articles