# - * - кодирование: 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 неудачи: {}". Формат (е)}