Запуск модуля Runbook из другого модуля Runbook
Применимо к:Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator
В Service Management Automation рекомендуется записывать многоразовые, модульные Runbook с дискретной функцией, которые могут использовать другие модули Runbook. Родительский модуль Runbook часто вызывает один или несколько дочерних модулей Runbook для выполнения требуемых функций. Существует два способа вызова дочернего модуля Runbook, и каждый имеет уникальные отличия, которые следует понимать для определения наиболее подходящих способов для различных сценариев.
Вызов дочернего модуля Runbook с использованием встроенного выполнения
Запуск дочернего модуля Runbook с использованием командлета
Вызов дочернего модуля Runbook с использованием встроенного выполнения
Для вызова встроенной функции модуля Runbook из другого модуля Runbook используйте имя модуля Runbook и укажите такие же значения для параметров, которые бы вы использовали для действия или командлета. Все модули Runbook в одной среде Service Management Automation доступны для использования подобным образом остальным модулям. Родительский модуль Runbook будет ожидать завершения дочернего модуля Runbook перед переходом к следующей строке, а любые выходные данные вернутся непосредственно в родительский элемент.
При вызове встроенной функции модуля Runbook он выполняется в том же задании, что и родительский модуль Runbook. Запущенный дочерний модуль Runbook не будет указан в журнале заданий. Любые исключения и выходные потоковые данные из дочернего модуля Runbook будут связаны с родительским модулем. Это приведет к меньшему числу заданий и упростит отслеживание и устранение неполадок, поскольку все исключения, вызванные дочерним модулем Runbook, и все выходные потоковые данные связаны с заданием родительского модуля Runbook.
При публикации модуля Runbook все дочерние модули Runbook, которые он вызывает, должны уже иметь опубликованную версию. Это нужно потому, что Автоматизация создает связь со всеми дочерними модулями Runbook при компиляции модуля Runbook. В противном случае родительский модуль Runbook будет правильно отображаться для публикации, но создаст исключение при запуске. В такой ситуации можно повторно опубликовать родительский модуль Runbook и указать правильные ссылки на дочерние модули Runbook. Повторная публикация родительского модуля Runbook не требуется, если все дочерние модули Runbook были изменены, так как в этом случае связь уже создана.
Параметры дочернего модуля Runbook с вызовом встроенной функции могут иметь любой тип данных, включая сложные объекты, а сериализация JSON отсутствует, как при запуске модуля Runbook с помощью портала управления или командлета Start-SmaRunbook.
В следующем примере вызывается тестовый дочерний модуль Runbook, который принимает три параметра: сложный объект, целое число и логическое значение. Переменной назначаются выходные данные дочернего модуля Runbook.
$vm = Get-VM –Name "MyVM" –ComputerName "MyServer"
$output = Test-ChildRunbook –VM $vm –RepeatCount 2 –Restart $true
Запуск дочернего модуля Runbook с использованием командлета
Для запуска модуля Runbook можно использовать командлет Start-SMARunbook, как описано в разделе Порядок запуска модуля Runbook с помощью Windows PowerShell. При запуске дочернего модуля Runbook из командлета родительский модуль Runbook перейдет на следующую строку сразу после создания задания для дочернего модуля Runbook. Если из модуля Runbook необходимо вернуть выходные данные, нужно получить доступ к заданию с помощью Get SMAJobOutput.
Задание из дочернего модуля Runbook, запущенное с помощью командлета, будет выполняться в отдельном задании из родительского модуля Runbook. Это приведет к большему числу заданий по сравнению с использованием вызова встроенной функции рабочего процесса, что увеличит временные затраты на рабочем сервере и усложнит их отслеживание. Родитель может запустить несколько дочерних модулей Runbook не дожидаясь их выполнения. Для параллельного выполнения вызова встроенной функции дочерних модулей Runbook того же типа родительскому модулю Runbook придется использовать ключевое слово "parallel".
Параметры для дочернего модуля Runbook, запущенного с помощью командлета, представлены в виде хэш-таблицы, как описано в разделе Параметры модуля Runbook. Несмотря на то, что можно указать имя ресурса учетных данных, как описано в Учетные данные, только простые типы данных доступны для использования. Если модуль Runbook имеет параметр со сложным типом данных, он должен быть вызван с помощью встроенной функции.
В следующем примере запускается дочерний модуль Runbook с параметрами и ожидается его завершение. После завершения родительский модуль Runbook собирает его выходные данные из задания.
$webServer = 'https://MyServer'
$port = 9090
$runbookName = "Test-Runbook"
$params = @{"VMName"="MyVM";"RepeatCount"=2;"Restart"=$true}
$job = Start-SmaRunbook –WebServiceEndpoint $webServer –Port $port –Name $runbookName –Parameters $params
$doLoop = $true
While ($doLoop) {
$job = Get-SmaJob –WebServiceEndpoint $webServer –Port $port -Id $job.Id
$status = $job.Status
$doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped")
}
Get-SmaJobOutput –WebServiceEndpoint $webServer –Port $port -Id $job.Id –Stream Output
Сравнение методов для вызова дочернего модуля Runbook
В следующей таблице перечислены различия между двумя методами для вызова модуля Runbook из другого модуля Runbook.
Встроенная функция |
Командлет |
|
---|---|---|
Задание |
Дочерние модули Runbook выполняются в том же задании, что и родители. |
Для дочернего модуля Runbook создается отдельное задание. |
Выполнение |
Родительский модуль Runbook ожидает завершения дочернего модуля Runbook перед тем, как продолжить. |
Родительский модуль Runbook продолжает выполнение сразу после запуска дочернего модуля Runbook. |
Вывод |
Родительский модуль Runbook может получить выходные данные непосредственно из дочернего модуля Runbook. |
Родительский модуль Runbook должен вернуть выходные данные из задания дочернего модуля Runbook. |
Параметры |
Значения параметров дочерних модулей Runbook указываются отдельно и могут использовать любой тип данных. |
Значения для параметров дочерних модулей Runbook должны быть объединены в одну хэш-таблицу и могут содержать только простые типы данных, типы данных массива или объекта, использующие сериализацию JSON. |
Публикация |
Дочерний модуль Runbook должен быть опубликован перед публикацией родительского модуля Runbook. |
Дочерний модуль Runbook должен быть опубликован в любое время до запуска родительского модуля Runbook. |
См. также
Порядок запуска модуля Runbook с помощью Windows PowerShell
Создание модуля Runbook [SMA]
Расширение Service Management Automation с помощью модулей Runbook