Управление серверами 2.0

Ранее я писал о том, что создал скрипт для управления серверами Linux сейчас понимаю, что в процессе работы его доработал. В основном главное изменение коснулось ориентирование выбора массива на DNC имена так как в bash нету двумерных массивов.

Скрипт вообще получился компактнее и хорошо масштабируется. Но теперь важно заранее указать в /etc/host все используемые DNC имена.

#!/bin/sh
#### Подготовка переменных.
### Переменные времени
export xdate=`date +%Y-%m-%d_%H:%M`
### Переменные IP-адресов
# Переменные привязаны ip адресов.
export server1=server16
export server2=server18
# ftp
export serverftp1=10.10.10.10
export ftplogin1=login
export ftppassword1=pass
export ftpdir1=Software
### Инициализация Функций
# функция выбора
vibor_ip ()
{
	ip_all=""
	PS3='Выберите сервера: ' && echo
	while :
	do
		clear
		echo
		echo "Вы выбрали сервера: $ip_all"
		echo "---------------------------------------------"
		server_dns="$server1 $server2"
		options=($server_dns "Выбрать все" "Очистить выбор" "Отменить" "Выбрал")
		select opt in "${options[@]}"; do
		case $opt in
			"Выбрать все" )
			ip_all="$server_dns"
			break
			;;
			"Очистить выбор" )
			ip_all=""
			break
			;;
			"Отменить" )
			ip_all=""
			break 3
			;;
			"Выбрал" )
			if [ -z "$ip_all" ]; then
				echo && echo "Для выбора нужно указать хотя бы один сервер."
				sleep 1
				break
			else
				logger -t "$0" pid $$ $(whoami) выбраны сервера: $ip_all
				break 2
			fi
			;;
			* )
			if [[ "$ip_all" == *"$opt"* ]]; then
				break
			fi
			;;
		esac
		ip_all="$ip_all $opt"
		break
	done
	echo
}
start_v ()
{
	echo
	echo 'Старт'
	echo
	pssh -H "$ip_1 $ip_2" -i -l adm -t 20 "/etc/init.d/daemon.sh start"
	echo
}
stop_v ()
{
	echo
	echo "Остановка"
	echo
	pssh -H "$ip_1 $ip_2" -i -l adm -t 20 "/etc/init.d/daemon.sh stop"
	echo
}
obnova ()
{
	echo
	echo "Обновление"
	echo
	pssh -H "$ip_1 $ip_2" -l adm -t 60 "mv /opt/projects /opt/projects_$xdate; unzip -d /opt/ /opt/projects.zip; chown -R adm:adm /opt/projects"
	echo
}
download ()
{
	echo
	echo "Загрузка новой версии с ftp"
	echo
	pssh -H "$ip_1 $ip_2" -l root -t 0 "wget -t 25 ftp://$ftplogin1:$ftppassword1@$serverftp1/$ftpdir1/projects.zip -O /opt/projects.zip"
	echo
}
export -f download
### Body 
while :
do
	clear
	export freespaceH=`df -h | grep -w '/' | awk '{print $3}'`
	export MemTOTAL=`free -m | grep -w 'Mem' | awk '{print $2}'`
	export MemUSED=`free -m | grep -w 'Mem' | awk '{print $3}'`
	export MemFREE=`free -m | grep -w 'Mem' | awk '{print $4}'`
	export hostNM=`hostname`
	echo """
	Меню утилиты обновления</code>

	Выберите номер:
	1) - Остановка
	2) - Запуск
	3) - Обновление
	4) - Скачать с ftp обновление
	Q) - Выход из программы """
	read -n 1 anss
	case $anss in
		1)
		echo
		vibor_ip
		echo
		stop_v
		echo
		echo "Для продолжения работы нажмите Enter.."
		read qa
		;;
		2)
		echo
		vibor_ip
		echo
		start_v
		echo
		echo "Для продолжения работы нажмите Enter.."
		read qa
		;;
		3)
		clear
		echo
		echo "`colour red_black`Для обновления серверов с ftp необходимо скачать обновление.`colour white_black`"
		echo
		echo "Обновление скопированно?"
		echo
		echo "Да - `colour green_black`Y`colour white_black`"
		echo "Нет, но хочу скачать и начать обновление - `colour yellow_black`L`colour white_black`"
		echo "Нет - `colour red_black`N`colour white_black`"
		read -n 1 item
		case "$item" in
			y|Y)
			echo
			vibor_ip
			echo
			stop_v
			obnova
			start_v
			echo
			echo "Обновление завершено"
			;;
			l|L)
			echo
			vibor_ip
			echo
			download
			stop_v
			obnova
			start_v
			echo
			echo "Обновление завершено"
			;;
			n|N)
			echo "Скачайте с ftp обновление и повторите"
			;;
			*)
			echo "Ввели неверно, повторите."
		;;
		esac
		echo
		echo "Для продолжения работы нажмите Enter.."
		read qa
		;;
		4)
		echo
		vibor_ip
		echo
		download
		echo
		echo "Для продолжения работы нажмите Enter.."
		read qa
		;;
		q|Q)
		exit 0
		;;
	esac
done

 

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s