Self Service виртуальных машин; Создание виртуальной машины с портала SCSM; (часть 2)

Во второй части гайда мы обратим взоры на дочерние runbook’и.

  1. Создание Runbook’а; (часть 1)

2. Создание дочерних Runbook’ов; (часть 2)

3. Импорт Runbook’ов в SCSM; (часть 3)

4. Создание шаблонов для публикации на портале; (часть 3)

5. Подготовка Request Offering к публикации; (часть 4)

6. Публикация и проверка. (часть 4)

Вначале я поясню, зачем нужны дочерние runbook’и. Изначально все мои ранбуки использовали просто шаг запуск виртуальной машины из интеграционного пакета VMM, но потом я понял, что данный шаг используется в половине runbook’ов, кроме того, мне показалось, что мои runbook’и “раздуваются” до неприличных размеров, и захотелось добавить в них модульность, так как модули по отдельности проще тестировать и можно использовать заново (советую использовать тот же подход для PowerShell скриптов 😉 ).

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

Я использую всего 2 дочерних runbook’а. Это запуск виртуальной машины и запуск синхронизации коннектора SCSM.

Запуск виртуальной машины

Runbook выглядит вот так

module-runbooks-00

Начинаем, как обычно, с шага Initialize Data.

module-runbooks-02

Parent Runbook - будет получать значение {Runbook Process ID from “Initialize Data”} родительского Runbook’а

Reserved - получит значение “NewVM” из runbook’а “Create VM from Template”

VM ID - получит значение {VM ID from “Get VM”} родительского Runbook’а

Далее, как Вы заметили, runbook может “выполнить” два сценария. Для новой виртуальной машины или для существующей. Для этого в линке к следующему событию нужно указать условие Reserved from Initialize Data equals “NewVM” для сценария запуска новой виртуальной машины и Reserved from Initialize Data does not equals “NewVM” для сценария модификация VM.module-runbooks-03

Следующими шагами будет получить данные о виртуальной машине и запустить её

2. Get VM

Action: Get VM

Connector: VMM Connector

Filter: {VM ID from “Initialize Data”}

3. Start VM

Action: Start VM

Connector: VMM Connector

Filter: {VM ID from “Get VM”}

Интересная ремарка, когда я пытался сделать тоже самое без шага “Get VM” шаг “Start VM” генерировал ошибку, у меня нет объяснения этому феномену, так как значения совпадают.

4. Delay 90

Action: Run .Net Script

Type: PowerShell

Script: Sleep 90

Ждем пока виртуальная машина загрузится и получит IP.

5. Run VMM PowerShell Script

Action: Run VMM PowerShell Script

Connector: VMM Connector

PowerShell: $a = Get-SCVirtualMachine {VM Name from “Get VM”} Get-SCVirtualNetworkAdapter %{$_.ipv4addresses}

Output: $a

6. Return Data

Action: Return Data (модуль Runbook Control)

IP: {Output Variable 01 from “Run VMM PowerShell Script”}

Для того чтобы вернуть данные в родительский runbook нужно настроить свойства дочернего runbook’а и добавить туда переменную “IP” и после этого создать данный шаг.

module-runbooks-04

module-runbooks-05

Значение переданное в родительский runbook можно использовать в родительском runbook’е в любом шаге после шага запуска дочернего runbook’а

module-runbooks-06

Вот шаг Launch VM из родительского runbook’а, укажите переменные и runbook (обратите внимание на галочку). Данные переменные будут доступны только после того как Вы создадите шаг Initialize Data в дочернем runbook’е, создадите в нем переменные и сохраните дочерний runbook.

module-runbooks-07

Если Вы все сделали правильно, родительский runbook будет запускать дочерний, ждать окончания runbook’а, получать из него IP адрес виртуальной машины и обновлять Service Request на портале этими данными.

Запуск синхронизации коннектора SCSM-SCOM

Runbook состоит из 1 действия “Run Program”, для того, чтобы это работало, необходим Service Manager Shell на сервере Orchestrator

cmd.exe /c C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –c  c:Start-SCOM-Sync.ps1

Содержимое скрипта (скрипт должен сам себя “убивать”)

Get-SCSMConnector -ComputerName lab-scsm-01 where {$_.displayname -Match “имя_коннектора_scom”} Start-SCSMConnector

$objCurrentPSProcess = [System.Diagnostics.Process]::GetCurrentProcess();

Stop-Process -Id $objCurrentPSProcess.ID;

module-runbooks-08

Тут необходимо пояснить: я создал данный runbook, так как хотел, чтобы в тестовой среде изменения отображались сразу после создания, изменения или удаления виртуальной машины. В ”боевой” среде я бы не рекомендовал запускать синхронизацию после каждого запроса пользователя, так как это очень ресурсоемкая операция.

Вероятно, есть варианты заполнять CMDB “точечно”, т.е. брать сущность из VMM или SCOM и напрямую передавать в CMDB. Этот вариант был бы идеален, но по этому вопросу я Вам ничего поведать не могу, по крайней мере пока.

Written on July 9, 2014