Управление серверами (python 2.7)

Так как еще в прошлый раз я наткнулся на ограничения при работе с массивами в bash, то решил переписать скрипт управления серверами для работы на python, за одно дополнил его проверками и более удобным выбором количества серверов (не по одному, а через запятую). Получилось пока сыровато, но вполне функционально.

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

Больше всего мне пока не нравится, что пока не реализовал защиты от неправильного ввода и когда список выводится для выбора серверов делает это со всеми скобками.

#!/bin/python
# -*- coding: utf-8 -*-
### Переменные
# Импорт модулей
import datetime
import os
import shutil
import subprocess
# Время
dt = datetime.datetime.now()
xdate = dt.strftime('%Y-%m-%d_%H:%M')
# ftp
serverftp1 = str("10.10.10.10")
ftplogin1 = str("login")
ftppassword1 = str("pass")
ftpdir1 = str("Software")
# IP-адреса
server2 = str("server16")
server1 = str("server18")
### Функции и массивы
# функци ошибки
def error():
    print ("\nОшибка. Попробуйте еще раз")
# функции выбора ip
def vibor_ip():
    global ip_all
    ip_all = str("")
    options = {
    0 : server1, 
    1 : server2
    }
    print options
    opt = input("\nВыберите с чем будем работать, через запятую:\n")
    for lll in opt:
        kkk = options[lll]
        ip_all = ip_all + " " + kkk 
    print ("Выбранные сервера: " + ip_all + "\n")    
# функция запуска
def start_v():
    qw = None
    print ip_all
    print ("Для запуска введите пароль для adm.")
    zap = str("pssh -A -H \"" + ip_all + "\" -l adm -i -t 100 \"/etc/init.d/daemon.sh start\" > /opt/pssh.txt")
    os.system(zap)
    test = os.system("cat /opt/pssh.txt | grep FAILURE")
    if test != 256:
        while qw != "N":
            test = os.system("cat /opt/pssh.txt | grep Permission")
            if test != 256:
                print ("\nОшибка. Ввели неверный пароль.")
            test = os.system("cat /opt/pssh.txt | grep \"EXIT_CODE : 1\"")
            if test != 256:
                print ("\nОшибка при запуске.")
            test = os.system("cat /opt/pssh.txt | grep \"No space\"")
            if test != 256:
                print ("\nЗакончилось свободное место.") 
            qw = raw_input("\nХотите еще раз запустить ? (Y)es. (N)o.\n")
            if qw != "N":
                print ("Для запуска введите пароль для adm.")
                os.system(zap)
                test = os.system("cat /opt/pssh.txt | grep FAILURE")
                if test == 256:
                    print ("Запускается на серверах" + ip_all)
                    qw = str("N")      
    else:
        print ("Запускается на серверах" + ip_all)
    os.system("rm -rf /opt/pssh.txt")
# функция остановки 
def stop_v():
    qw = None
    print ip_all
    print ("Для остановки введите пароль для adm.")
    zap = str("pssh -A -H \"" + ip_all + "\" -l adm -i -t 100 \"/etc/init.d/daemon.sh stop\" > /opt/pssh.txt")
    os.system(zap)
    test = os.system("cat /opt/pssh.txt | grep FAILURE")
    if test != 256:
        while qw != "N":
            test = os.system("cat /opt/pssh.txt | grep Permission")
            if test != 256:
                print ("\nОшибка. Ввели неверный пароль.")
            test = os.system("cat /opt/pssh.txt | grep \"EXIT_CODE : 1\"")
            if test != 256:
                print ("\nОшибка при остановке.")
            test = os.system("cat /opt/pssh.txt | grep \"No space\"")
            if test != 256:
                print ("\nЗакончилось свободное место.")
            test = os.system("cat /opt/pssh.txt | grep \"No pid file, not stopping\"")    
            if test != 256:
                print ("\nУже остановлен.")                  
            qw = raw_input("\nХотите еще раз запустить? (Y)es. (N)o.\n")
            if qw != "N":
                print ("Для остановки введите пароль для adm.")
                os.system(zap)
                test = os.system("cat /opt/pssh.txt | grep FAILURE")
                if test == 256:
                    print ("Остановлен на серверах" + ip_all)
                    qw = str("N")      
    else:
        print ("Остановлен на серверах" + ip_all)
    os.system("rm -rf /opt/pssh.txt")
# функция перезапуска
def restart_v():
    qw = None
    print ("Для перезапуска введите пароль для adm.")
    zap = str("pssh -A -H \"" + ip_all + "\" -l adm -i -t 100 \"/etc/init.d/daemon.sh restart\" > /opt/pssh.txt")
    os.system(zap)
    test = os.system("cat /opt/pssh.txt | grep FAILURE")
    if test != 256:
        while qw != "N":
            test = os.system("cat /opt/pssh.txt | grep Permission")
            if test != 256:
                print ("\nОшибка. Ввели неверный пароль.")
            test = os.system("cat /opt/pssh.txt | grep \"EXIT_CODE : 1\"")
            if test != 256:
                print ("\nОшибка при перезапуске.")
            test = os.system("cat /opt/pssh.txt | grep \"No space\"")
            if test != 256:
                print ("\nЗакончилось свободное место.")                 
            qw = raw_input("\nХотите еще раз перезапустить? (Y)es. (N)o.\n")
            if qw != "N":
                print ("Для перезапуска введите пароль для adm.")
                os.system(zap)
                test = os.system("cat /opt/pssh.txt | grep FAILURE")
                if test == 256:
                    print ("перезапущен на серверах" + ip_all)
                    qw = str("N")      
    else:
        print ("перезапущен на серверах" + ip_all)
    os.system("rm -rf /opt/pssh.txt")     
# функция обновления 
def obnova():
    qw = None
    print ("Для обновления введите пароль для adm.")
    zap = str("pssh -A -H \"" + ip_all + "\" -l adm -i -t 100 \"mv /opt/projects /opt/old/projects_$xdate; unzip -d /opt/ /opt/projects.zip; /bin/cp /opt/conf/* /opt/projects/conf/; chmod +x -R /opt/projects; chown -R adm:adm /opt/projects\" > /opt/pssh.txt")
    os.system(zap)
    test = os.system("cat /opt/pssh.txt | grep FAILURE")
    if test != 256:
        while qw != "N":
            test = os.system("cat /opt/pssh.txt | grep Permission")
            if test != 256:
                print ("\nОшибка. Ввели неверный пароль.")
            test = os.system("cat /opt/pssh.txt | grep \"EXIT_CODE : 1\"")
            if test != 256:
                print ("\nОшибка при запуске.")
            test = os.system("cat /opt/pssh.txt | grep \"No space\"")
            if test != 256:
                print ("\nЗакончилось свободное место.") 
            qw = raw_input("\nХотите еще раз обновить ? (Y)es. (N)o.\n")
            if qw != "N":
                print ("Для обновления введите пароль для adm.")
                os.system(zap)
                test = os.system("cat /opt/pssh.txt | grep FAILURE")
                if test == 256:
                    print ("Обновлен на серверах" + ip_all)
                    qw = str("N")      
    else:
        print ("Обновлен на серверах" + ip_all)
    os.system("rm -rf /opt/pssh.txt")
# функция скачивания с ftp 
def download():
    qw = None
    print ("Для загрузки с ftp новой версии, введите пароль для adm.")
    zap = str("pssh -A -H \"" + ip_all + "\" -l adm -i -t 1500 \"wget -t 25 ftp://" + ftplogin1 + ":" + ftppassword1 + "@" + serverftp1 + "/" + ftpdir1 + "/projects_.zip -O /opt/projects.zip\" > /opt/pssh.txt")
    os.system(zap)
    test = os.system("cat /opt/pssh.txt | grep FAILURE")
    if test != 256:
        while qw != "N":
            test = os.system("cat /opt/pssh.txt | grep Permission")
            if test != 256:
                print ("\nОшибка. Ввели неверный пароль.")
            test = os.system("cat /opt/pssh.txt | grep \"EXIT_CODE : 1\"")
            if test != 256:
                print ("\nОшибка при загрузке.")
            test = os.system("cat /opt/pssh.txt | grep \"No space\"")
            if test != 256:
                print ("\nЗакончилось свободное место.")
            test = os.system("cat /opt/pssh.txt | grep \"Timed out\"")
            if test != 256:
                print ("\nНе дождались загрузки с ftp. Возможно проблемы с соединением.")     
            qw = raw_input("\nХотите еще раз скачать новую сборку? (Y)es. (N)o.\n")
            if qw != "N":
                print ("Для загрузки с ftp новой версии, введите пароль для adm.")
                os.system(zap)
                test = os.system("cat /opt/pssh.txt | grep FAILURE")
                if test == 256:
                    print ("Cборка загруженна на сервера" + ip_all)
                    qw = str("N")      
    else:
        print ("Cборка загруженна на сервера" + ip_all)
    os.system("rm -rf /opt/pssh.txt")
# функция вопроса о ftp
def ftp_ok():
    print "***********************************************" 
    print " Для обновления серверов с ftp необходимо скачать обновление"
    print " Обновление скопированно?" 
    print " Да - Y" 
    print " Нет, но хочу скачать и начать обновление - L" 
    print " Нет - N" 
    item = raw_input()
# функция на выход
def ex():
    print ("Выход.")
    exit()
# функция меню 
def text2():
    os.system('clear')
    print ("""
    Меню обновления:
1) - Остановка серверов.
2) - Запуск серверов.
3) - Перезапуск серверов.
4) - Обновление.
0) - Перенос с ftp актуального дистрибутива.
Q) - Выйти.
""")
### Body
text2()  
qwe = raw_input("Выберите пункт для продолжения: ")
while qwe != "Q" and qwe != "q":
    if anq == "1":
        vibor_ip()
    elif anq == "2":
        vibor_ip_tren()
    if qwe == "1":
        stop_v()
    elif qwe == "2":
        start_v()
    elif qwe == "3":
        restart_v()
    elif qwe == "4":
        ftp_ok()
        if item == "L" and item == "l":
            download()
            stop_v()
            obnova()
            start_v()              
        elif item == "Y" and item == "y":
            stop_v()
            obnova()
            start_v()
    elif qwe == "0":
        download()
    os.system('sleep 2')
    text2()
    qwe = raw_input("Выберите пункт для продолжения: ")

P.S. Хотя сомневаюсь, что дальше буду развивать его, ибо мега прорыва не будет, ибо я просто ищу более красивые возможности выбрать нужные сервера и отдать их на выполнение pssh. Когда в действительности нужно больше работать над использованием ansible и других современных средств.

Реклама

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s