Ключ установки ActiveMQ

# - * - кодирование: UTF-8 - * - 
«»» 
Поддержка ActiveMQ 

Этот модуль использует менеджер веб - приложение для управления ActiveMQ. 
Если менеджер ActiveMQ не настроен некоторые функции не будут работать. 
Конфигурация: 
    - Java бен путь должен быть в пути по умолчанию 
    - Если ipv6 включена убедитесь , что вы разрешаете доступ менеджера к ipv6 интерфейсу 
      «0: 0: 0: 0: 0: 0: 0: 1» 
    - Если вы используете tomcat.tar.gz он должен быть установлен или слинкован под 
      `` / opt``, предпочтительно используя имя ActiveMQ 
    - «tomcat.signal старт / стоп» работает , но он не использует сценарии запуска 
«»»

# Импорта питон ЛИЭС 
импорт платформа 
импорт SYS  
импорта подпроцесс
импорт Os 
импорт повторно
JSON Импорт 
# скрытый часть внутри вызывающего модуля 
импорта Резьбонарезной 
Import Time 

IF sys.platform.startswith ( 'победа'): 
    # система Windows , 
    СИСТЕМА = "Windows" 
    MAIN_DIR = 'Apache-ActiveMQ-5.13.1' 
    JDK_DIR = «jdk1.8.0 _91 " 
    JDKPKG = 'jdk1.8.0_91.zip' 
    base_dir = 'C: \\' 
    PKG_PATH = 'C: \\' 
    х86 = platform.architecture () [0] 

еще: 
    # система не Windows , 
    в системе =" Linux " 
    MAIN_DIR = 'Apache-ActiveMQ-5.13.2' 
    JDK_DIR = "jdk1.8.0_45" 
    JDKPKG = 'JDK-8u45-Linux-x64.gz' 
    base_dir = '/ USR / местные' 
    PKG_PATH = '/ USR / местные» 
    х86 = platform.architecture () [0]


Класс InstallError (Exception): 
    пропуск 


Защиту get_java_success (java_home): 
    из = utils_cmd.get_output (java_home + '-v') 
    utils.logger.info (java_home + '-v') 
    результат = '' .join (уходит) 
    утилитами. logger.info (результат) 
    invalid_msg = [ 'справедливо', 'ERROR', 'не совместимы'] 
    для г в invalid_msg: 
        если не фильтровать ((лямбда list_item: я в list_item), из) == []: 
            поднять InstallError ( 'установить Java сбой: {}' формат (результат).) 


защиту _send_message (сообщение, JID = нет): 
    __salt __ [ 'exec_module.module_send_event'] (сообщение, JID = JID)

 
четкости установки (BASEDIR = нет, порт = None , пакет = None, dependPkg = None, JID = None,
            execAccount = None, outputParam = [], ** kwargs): 
    U "" " 
    : Param ActiveMQ: ActiveMQ Имя пакета 
    : пары InstallDir: ActiveMQ пути установки 
    : пары pkg_dir: ActiveMQ путь пакета 
    : возвращение: { "успех": false," сообщение ": сообщение} 
    """ 
    попробуйте: 
        RET, пары = utils_errors.check_inputs (местные (), ауты = [ 'dependPkg']) , 
        если не в отставке: 
            возвращение { 'успех': false, 'сообщение': ошибка «Input Params , пожалуйста , проверьте входную Params: {}»формат (пары)}. 
        RunAs = execAccount 
        main_path = baseDir.split (os.sep) [- 1] 
        #参数预处理
        если SYSTEM == "окно"и baseDir.endswith ( ":"): 
            BASEDIR = BASEDIR + '\\' 
        Элиф SYSTEM == "окна" и baseDir.endswith ( "\\"): 
            пройти 
        еще: 
            BASEDIR = BASEDIR.rstrip (os.sep) 

        # использование прекомпилирована пакет
        _send_message (U '1} {0} {2} {'. формат (U " в установке Start", система, U "Система"), JID = JID) 

        # определяет , существует ли услуга и работает , 
        если SYSTEM == " Окна ": 
            # Если обновление, возможно , потребуется изменить имя службы 
            OUT = __salt __ [ 'service.status'] (" ActiveMQ ") 
        еще: 
            OUT = __salt __ [ 'ps.pgrep'] (" ActiveMQ ") 
        IF OUT: 
            возвращение {" Успех «: false,» Сообщение «: U» ActiveMQ работает и было установлено первым Пожалуйста STOP «} , 
        если SYSTEM =="окна ": 
            activemq_home = utils_pack.install_pkgs (упаковка [0], BASEDIR)
был установлен ActiveMQ и работает, пожалуйста , остановите первым "} , 
        если не пакет:
            вернуться { "успех": false, "сообщение": u'activemq установить не получится , пакет пары пустые, пожалуйста , прочитайте журнал '!} 

        #解压主包 , 
        если не dependPkg в ([], Отсутствует, ''):
        еще: 
            activemq_home = utils_pack.unpack_tar (упаковка [0], BASEDIR, путь = main_path) , 
        если os.path.isdir (activemq_home) и LEN (os.listdir (activemq_home)) = 0: 
            _send_message (и "ActiveMQ распаковывать успеха. прогресс установки: 30% "JID = JID). 
            utils.logger.info ( 'activemq_path: {}'. формат (activemq_home)) 
        еще: 
            возвращение {" успех ": false, "сообщение":«ActiveMQ инсталляцию из строя, распаковать Основной пакет не в состоянии '} 

        jdk_dir = jDK_DIR 
        #解压依赖包 , 
                если не dependPkg_item.endswith (' EXE ".):
            для dependPkg_item в dependPkg: 
                имя_пакет = dependPkg_item.split (os.sep) [- 1] 

                    путь_к_файл = utils_pack.unpack_tar (dependPkg_item, BASEDIR, путь = имя_пакет) , 
                    если 'JDK' в FILE_PATH или 'Java' в FILE_PATH: 
                        jdk_dir = путь_к_файл , 
                    если os.path.isdir (file_path) и LEN (os.listdir (file_path)) = 0: 
                        _send_message (и "{0} установить успех" .format (package_name), JID = JID) 
                    еще: 
                        возвращение { "успеха": Ложное, 
                                "сообщение": «ActiveMQ инсталляции из строя, {} распакуйте fail'.format (package_name)}
                Элиф dependPkg_item.endswith и platform.platform ()> = 'Windows-7' ( 'EXE.'): в 
                    то время как 1: 
                        если os.path.exists (каталог_установки):
                    каталог_установки = os.path.join (BASEDIR, имя_пакет)
                    CMD = '{0} / с КАТАЛОГ_УСТАНОВКИ = {1} INSTALL_SILENT = Enable'.format (dependPkg_item, 
                                                                               каталог_установки) 
                    utils.logger.info (' установить Java: {} 'Формат (CMD)) , 
                    если RunAs: 
                        CMD =' Sudo -u {} "{}". формат (RunAs, CMD) 
                    из = __salt __ [ 'cmd.run_stdout'] (CMD, УХО = BASEDIR, 
                                                     python_shell = False) .splitlines () 

                            перерыв 
                еще: 
                    install_dir = os.path. присоединиться (BASEDIR, package_name) 
                    CMD = «{0} / с INSTALLDIR = {1} INSTALL_SILENT = Enable /LC:\setup.log'.format ( 
                        dependPkg_item, 
                        каталог_установка) 
                    utils.logger. Информация ( 'установить Java: {}' формат (CMD).) 
                    попробовать: 
                        если руны: 
                            . CMD = 'Судо -u {} "{}"' формат (RunAs, CMD) 
                        р = subprocess.Popen (CMD, УХО = BASEDIR, скорлупа = False) 
                        p.wait () , за 
                    исключением Exception как е:
                        utils.logger.info ( '{}' формат (е).) 
                        проходят ,  
                    start_time = time.time () 
                    то время как 1:
                        если os.path.exists (каталог_установки): 
                            utils.logger.info (u'java является установка ... ') 
                            перерыв , 
                        если time.time () - start_time> 1000000: 
                            поднять InstallError (u'java установить не в состоянии ') 

                    start_time = time.time () в 
                    то время как 1: 
                        с открытым (' C: \\ setup.log '), а е: 
                            f.seek (0, 1) , 
                            если '=== Logging остановлена:' в f.readline (): 
                                utils.logger.Информация (f.readline ()) 
                                сломать , 

                        если time.time () - start_time> 10000: 
                            поднять InstallError (u'java установить не в состоянии ') 

        utils.logger.info (u'unpack пакетов зависимостей успеха') 
        _send_message (и "распаковывать зависимые пакеты success.installation прогресса: 90%", JID = JID) 
        # добавить JDK пути в переменные окружения ActiveMQ 
        если SYSTEM == "окна": 
            # добавить ActiveMQ сервис 
            win_doc = os.path.join (BASEDIR, MAIN_DIR, 
                                   . "бен \\ {0}" формат ( "win32" , если '32' в X86 еще «Win64 «)) 
            java_home = os.path.join (BASEDIR, JDK_DIR, "бен", "Java") 
            Get_java_success (java_home)

            __salt __ [ 'file.replace'] (win_doc + "\\ wrapper.conf", '^ = wrapper.java.command Java', 
                                     'wrapper.java.command =' + java_home.replace ( "\\", «/ «)) 
            CMD = win_doc + "\\ InstallService.bat" 
            результат = utils_cmd.get_output (CMD, RunAs = RunAs) 
        остальное: 
            activemq_bin_home = '{0} /bin/activemq'.format (activemq_home) 
            java_home =' JAVA_HOME = { 0} \ n'.format (jdk_dir) 
            get_java_success (java_home) 
            из = __salt __ [ 'file.prepend'] (activemq_bin_home, java_home) 
        путь_установки = json.dumps ({ 'путь_установки': activemq_home}) 
        возвращение { "успех": Правда, "сообщение": u'activemq установить успех, 'outputParam': install_path} 
    кроме исключений при е: 
        возвращение { "успеха": ложные, "сообщение ": "{0}" формат (е)}. , 
    наконец:
        если os.path.exists ( 'C: \\ setup.log'): 
            os.remove ( 'C: \\ setup.log') 


Защиту начать (BASEDIR = base_dir, JID = нет, execAccount = нет, outputParam = [ ] ** kwargs): 
    попробовать: 
        RET, пары = utils_errors.check_inputs (местные ()) , 
        если не в отставке:  
            возвращение { 'успех': false, 'сообщение': «ВВЕДИТЕ Params ошибка, пожалуйста , проверьте вход Титулы: {}».Формат (параметр)} 
        руна = execAccount 
        BASEDIR = baseDir.rstrip (os.sep)
        УХО = os.path.join (BASEDIR, 'бин') , 
        если не os.path.exists (УХО): 
            УХО = os.path.join (BASEDIR, MAIN_DIR, 'бин') , 
        если не os.path.exists (УХО): 
            возвращение { 'успех': false, "сообщение": «нет ActiveMQ ExecFile в {} директории, введите, пожалуйста again'.format (BASEDIR)} 

        utils.logger.info ( 'ActiveMQ каталога: {}'. формат (УХО)) , 
        если SYSTEM == "окно":
            __salt __ [ 'service.start'] ( "ActiveMQ") 
            из = __salt __ [ 'service.status'] ( "ActiveMQ") 
        еще: 
            результат = "" 
            CMD = "ш ActiveMQ начать" 
            req_cmd = "ш ActiveMQ статус" 
            #运行летучая мышь文件启动
            я = 0 , 
            а я <= 1000: 
                I + 1 =
                результат = utils_cmd.get_output (CMD, УХО = УХО, ждать = True, RunAs = RunAs) 
                из = не фильтр ( 
                    (лямбда list_item: "ActiveMQ работает" в list_item), результат) == [] , 
                если вне: 
                    вырваться 
                из = os.path.exists (
                    '{0} /data/activemq.pid'.format (cwd.rstrip (' бин))) , 
                если из: 
                    перерыв , 
        если из: 
            сообщение = utils.make_msg (и "ActiveMQ начать успех") 
            возврат товара { "успеха": Правда, "сообщение": сообщение} 
        еще: 
            сообщение = utils.make_msg (и "ActiveMQ начинает терпеть неудачу", other_msg = ули (результат)) 
            возвращение { "успех": false, "сообщение": сообщение} 
    кроме исключений при е: 
        возвращение { "успех": false, "сообщение": 'ActiveMQ начинает терпеть неудачу: {}'. формат (е)} 


Защиты остановки (BASEDIR = base_dir, JID = None, execAccount = None, outputParam = [], ** kwargs): 
    пытаться:
        RET, пары = utils_errors.check_inputs (местные ())
        если не в отставке: 
            возвращение { 'успех': false, 'сообщение': 'ВВЕДИТЕ Params ошибки, пожалуйста , проверьте входную Params: {}'. формат (пары)} 
        RunAs = execAccount 
        BASEDIR = baseDir.rstrip (os.sep) 
        Путь = os.path.join (BASEDIR, 'бен / ActiveMQ') , 
        если не os.path.exists (путь): 
            путь = os.path.join (BASEDIR, MAIN_DIR 'бен / ActiveMQ') , 
        если не os.path.exists (путь): 
            возвращение { 'успех': false, "сообщение": 'нет ActiveMQ ExecFile в {} директории, введите, пожалуйста again'.format (BASEDIR)} 
                                                            'ш {0} stop'.format (путь)) 
        вне, результат = __salt __ [»exec_module.manageService '] (СИСТЕМА, 'ActiveMQ', 'service.stop',
                                                            'ActiveMQ', 

        если SYSTEM == "окна": 
            __salt __ [ 'service.stop'] ( "ActiveMQ") 
            из = не __salt __ [ 'service.status'] ( "ActiveMQ") 
        еще: 
            результат, сообщение = __salt __ [» exec_module.manageService '] (СИСТЕМА, 'ActiveMQ', 
                                                                    'service.stop', 
                                                                    'ActiveMQ', 
                                                                    'ш {0} stop'.format (путь)) 

            = 0 
            CWD = path.rstrip (' ActiveMQ') , 
            А я <= 1000: 
                I + 1 = 
                р = подпроцесс.Popen ( "ш ActiveMQ статус", оболочки = True,
                                     CWD = CWD, 
                                     стандартный вывод = subprocess.PIPE, 
                                     STDERR = subprocess.PIPE, STDIN = None) 
                Результат = p.stdout.readlines () 
                из = Не фильтровать ( 
                    (лямбда list_item: "ActiveMQ не работает" в list_item), результат) = = [] , 
                если из: 
                    вырваться 
                из = не os.path.exists ( '{0} /data/activemq.pid'.format (УХО)) 
                если из: 
                    перерыв 
 , 
        если вне:
            сообщение = utils.make_msg (u'Activemq остановить успех! ) 
            вернуться { "успеха": Правда, "сообщение":сообщение} 
        еще:
            сообщение = utils.make_msg (u'Activemq остановить сбой, сообщение об ошибке:», other_msg = ули (результат)) 
            возвращение { "успех": false, "сообщение": сообщение} 
    кроме исключений при е: 
        возвращение { "успех": Ложное , "сообщение": 'ActiveMQ остановить сбой, сообщение об ошибке: {}'. формат (е)} 


защиту перезагружать (BASEDIR = base_dir, JID = None, outputParam = [], 
            execAccount = None, ** kwargs): 
    BASEDIR = BASEDIR .rstrip (os.sep) 
 
    попробовать: 
        RET, пары = utils_errors.check_inputs (местные () ) , 
        если не RET:
            возвращение { 'успех': false, 'сообщение': 'ВВЕДИТЕ Params ошибка, пожалуйста , проверьте входную Params: {}' формат (пары).} 

        RunAs = execAccount 
        если не os.path.exists (BASEDIR ): 
            вернуть { 'успех': false, "сообщение":«Нет ActiveMQ ExecFile в {}, то пожалуйста, введите again'.format (BASEDIR)}

        если SYSTEM == "окна": 
            __salt __ [ 'service.restart'] ( "ActiveMQ") 
            из = __salt __ [ 'service.status'] ( "ActiveMQ") , 
            если из: 
                сообщение = utils.make_msg (и "ActiveMQ перезагружать успеха ") 
                возвращение {" успех ": Правда, "сообщение": сообщение} 
            еще: 
                сообщение = utils.make_msg (и" перезагрузка ActiveMQ провала ") 
                возвращение {" успех ": false, "сообщение": сообщение} сообщение ": сообщение} 
        еще:
            УХО =«{0 } /bin'.format (BASEDIR) , 
            если не os.path.exists (CWD): 
                CWD = «{0} / {1} /bin'.format (BASEDIR,MAIN_DIR) 
            результат = utils_cmd.get_output ( "ш ActiveMQ статус",
                                          УХО = УХО, 
                                          ждать = True, RunAs = RunAs) 
            из = не фильтр ( 
                (лямбда list_item: "ActiveMQ работает" в list_item) == [], результат) 

            utils.logger.info ( 'перезагрузки: {}' формат. (уходит)) , 
            если не из: 
                сообщение = utils.make_msg (и "ActiveMQ не работает, попробуйте запустить") 
                результат = пуск (BASEDIR = BASEDIR, JID = JID) 
                сообщение = utils.make_msg (результат [ "сообщение"] )  , 
                если результат [ "успех"]:
                    возвращение { «успех»: Правда, «сообщение»: и «ActiveMQ перезапустить успех»} 
                еще:
                    Возвращение { "Успех": false, "сообщение": и "перезагрузка ActiveMQ потерпеть неудачу, но служба есть остановки"} 
            еще: 
                результат = остановка (BASEDIR = BASEDIR, JID = JID) 
                utils.logger.info ( 'остановка: {}' .format (результат)) , 
                если не результат [ "успех"]: 
                    возвращение { "успех": false, "сообщение": и "перезагрузка ActiveMQ безуспешными, остановка службы не в состоянии "} 

            из = пуск (BASEDIR = BASEDIR, JID = JID) 
            utils.logger.info ( 'старт: {}' формат (уходит).) 
            еще: 
                возвращение {»Успех «: false,„сообщение“: и» ActiveMQ перезапустить сбой, запустите сбой "} , 
    кроме исключений , как е: , 
            если из ["Успех "]:
                возвращение { "успех": Правда, "сообщение": и "ActiveMQ перезапустить успех"}
        вернуться { "Успех": false, "сообщение": "перезагрузка ActiveMQ неудачи: {}". Формат (е)}

  

рекомендация

отwww.cnblogs.com/slqt/p/10948013.html