обновление серверов через Orchestrator 2012 (часть 4)
Привет!
Продолжаем цикл статей, посвященных работе с Orchestrator.
В прошлый раз мы закончили вопросом «как запускать runbook?».
Общепринятый вариант — это использование activity Monitor Date/Time. В комбинации с Check Schedule можно создавать достаточно гибкое расписание. Например, перегрузка сервера в 08:00 в воскресенье.
У данного метода я вижу, как минимум, два недостатка.
Первый: реальную работу этот runbook будет выполнять всего 1 раз в неделю, но запущен будет всегда! То есть мы получаем максимальное значение одновременно выполняемых на runbook сервере runbook-ов, минус — количество подобных runbook-ов. Эту проблему можно решить, используя Invoke Runbook. У вас будет один главный runbook, который будет запускать все остальные. Я пробовал. Пока количество менее 10-20, еще можно работать, но чем их больше, тем труднее вносить изменения. Orchestrator начинает менять местами activity, переплетать link-и. И еще, чтобы внести изменения нужно остановить этот runbook и, следовательно, можно пропустить запуск какого-нибудь runbook-a!
Второй: я не нашел простого способа получить информацию о том, какие runbook-и когда стартуют. К sql-базе я запросы не писал , может быть, это как-то и можно получить. Если кто-то знает, буду рад вашим ответам в комментариях.
Все автоматические процедуры большинство из нас запускает через Task Scheduler.
Как же все просто и удобно!
Имя, Статус, Когда, Когда в след. раз, Когда уже выполнялась, Результат.
Так может и нам запускать свои runbook-и через Task Scheduler!?
Для этих целей можно использовать ps скрипт или очень полезную командную утилиту SCOJobRunner. Оба способа используют Orchestrator web service.
Давайте создадим runbook, который будет рассылать оповещения о предстоящих работах и запустим его с помощью SCOJobRunner.
Переходим в нужную папку.
И создаем runbook с именем e-mail Требуют обновлений.
Основную работу выполняет запрос к базе данных
set language russian IF DATENAME(weekday, getdate()) <> N'пятница' select servername, descr, convert(date,DATEADD(dd,1,getdate())) as NextDay, [time], [DayOfWeek], [EndTime], [E-mail business] from [dbo].[t_Orch_Patching_Server] where DayOfWeek = DATENAME(weekday, DATEADD(dd,1,getdate())) and NeedToUpdate = 1 ELSE select servername, descr, CASE [DayOfWeek] WHEN N'суббота' THEN convert(date,DATEADD(dd,1,getdate())) WHEN N'воскресенье' THEN convert(date,DATEADD(dd,2,getdate())) WHEN N'понедельник' THEN convert(date,DATEADD(dd,3,getdate())) END as NextDay, [time], [DayOfWeek], [EndTime], [E-mail business] from [dbo].[t_Orch_Patching_Server] where [DayOfWeek] in (DATENAME(weekday, DATEADD(dd,1,getdate())),DATENAME(weekday, DATEADD(dd,2,getdate())),DATENAME(weekday, DATEADD(dd,3,getdate()))) and NeedToUpdate = 1
Запрос — это копия запроса в runbook-e на проверку обновлений, добавлена только проверка NeedToUpdate = 1. Нет обновлений — нет оповещений.
Activity Send Email привязана Link-ом с проверкой:
В самой Send Mail можете использовать все данные из запроса. Порядковый номер определяет поле.
Например: Email — это [field(param1,’;’,7)], где вместо param1 вставьте:
Send Platform Event можно использовать для отладки.
Создадим Task в Task Scheduler. На вкладке Action укажем путь к утилите, а в arguments
-ID:»runbook guid»
Сам GUID можно посмотреть на Orchestrator Console.
Вот собственно и все на этот раз.
Следующая статья будет об установке обновлений.
Оставайтесь с нами. Пишите комментарии. Дальше будет интереснее!
Александр Петлевой
Александр, а продолжение будет?
Да. Лежит почти готовое уже месяц 🙂
Спасибо, жду с нетерпением! 🙂
Первые части уже реализовал, сейчас думаю про оптимизацию рассылок — письмо на сервис вместо кучи на каждый сервер.
Что-то оно у вас залежалось 🙂
Интересно посмотреть