Podřízené runbooky ve službě Service Management Automation
Osvědčeným postupem ve službě Service Management Automation (SMA) je psát opakovaně použitelné modulární runbooky s diskrétní funkcí, kterou můžou používat jiné runbooky. Nadřazený runbook často volá jeden nebo více podřízených runbooků, aby prováděly požadované funkce. Existují dva způsoby volání podřízeného runbooku a každý z nich má odlišné rozdíly, které byste měli pochopit, abyste mohli určit, která z nich bude pro různé scénáře nejvhodnější.
Vyvolání podřízeného runbooku pomocí vloženého spuštění
Pokud chcete vyvolat runbook vložený z jiného runbooku, použijte název runbooku a zadejte hodnoty pro jeho parametry přesně tak, jako byste použili aktivitu nebo rutinu. Všechny runbooky ve stejném prostředí SMA jsou k dispozici všem ostatním, které se mají tímto způsobem použít. Nadřazený runbook bude čekat na dokončení podřízeného runbooku před přechodem na další řádek a veškerý výstup se vrátí přímo nadřazené sadě.
Když vyvoláte vložený runbook, spustí se ve stejné úloze jako nadřazený runbook. V historii úloh podřízeného runbooku, který se spustil, se nezobrazí žádná indikace. Všechny výjimky a výstup datového proudu z podřízeného runbooku budou přidružené k nadřazené sadě. Výsledkem je méně úloh a usnadňuje jejich sledování a odstraňování potíží, protože všechny výjimky vyvolané podřízeným runbookem a výstupy datových proudů, které jsou přidružené k úloze nadřazeného runbooku.
Když je runbook publikovaný, všechny podřízené runbooky, které volá, už musí mít publikovanou verzi. Důvodem je to, že Automation při kompilaci runbooku sestaví přidružení ke všem podřízeným runbookům. Pokud ne, nadřazený runbook se zobrazí správně publikovat, ale po spuštění vygeneruje výjimku. V takovém případě můžete nadřazený runbook znovu publikovat, abyste mohli správně odkazovat na podřízené runbooky. Nadřazený runbook nemusíte znovu publikovat, pokud se změní některý z podřízených runbooků, protože přidružení již bylo vytvořeno.
Parametry podřízeného runbooku označovaného jako vložený můžou být libovolný datový typ, včetně složitých objektů, a neexistuje žádná serializace JSON, protože když runbook spustíte pomocí portálu pro správu nebo rutiny Start-SmaRunbook .
Typy runbooků
Runbook může používat pouze jiný runbook stejného typu jako podřízený runbook s použitím vloženého spuštění. To znamená, že runbook pracovního postupu PowerShellu nemůže použít jako podřízený runbook pomocí vloženého spuštění a runbook PowerShellu nemůže použít runbook pracovního postupu PowerShellu.
Při volání podřízeného runbooku pracovního postupu PowerShellu pomocí vloženého spuštění stačí použít název runbooku. Při volání podřízeného runbooku PowerShellu musíte před jeho název zadat .\ a určit, že se skript nachází v místním adresáři.
Příklad
Následující příklad vyvolá testovací podřízený runbook, který přijímá tři parametry, komplexní objekt, celé číslo a logickou hodnotu. Výstup podřízeného runbooku je přiřazen k proměnné. V tomto případě je podřízený runbook runbook runbook pracovního postupu PowerShellu.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Následuje stejný příklad použití runbooku powershellového skriptu jako podřízený runbook.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Spuštění podřízeného runbooku pomocí rutin
Ke spuštění runbooku pomocí rutiny Start-SMARunbook můžete použít Windows PowerShell. Když z rutiny spustíte podřízený runbook, nadřazený runbook se přesune na další řádek, jakmile se úloha vytvoří pro podřízený runbook. Pokud potřebujete načíst jakýkoli výstup z runbooku, musíte k úloze přistupovat pomocí Get-SMAJobOutput.
Úloha z podřízeného runbooku spuštěná pomocí rutiny se spustí v samostatné úloze od nadřazeného runbooku. Výsledkem je více úloh než vyvolání pracovního postupu, což zvyšuje režii na pracovním serveru a ztěžuje jejich sledování. Nadřazený objekt může spustit několik podřízených runbooků, aniž by čekal na dokončení každého z nich. Pro stejný druh paralelního spouštění, který volá podřízené runbooky vložené, by nadřazený runbook potřeboval použít paralelní klíčové slovo.
Parametry podřízeného runbooku spuštěného s rutinou se poskytují jako hashovací tabulka, jak je popsáno v části Parametry runbooku. Lze použít pouze jednoduché datové typy, i když můžete zadat název assetu přihlašovacích údajů, jak je popsáno v části Přihlašovací údaje. Pokud má runbook parametr se složitým datovým typem, musí se volat vložený.
Následující příklad spustí podřízený runbook s parametry a pak počká, až se dokončí. Po dokončení se jeho výstup shromažďuje z úlohy nadřazeným runbookem.
$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
Porovnání metod volání podřízeného runbooku
Následující tabulka shrnuje rozdíly mezi dvěma metodami volání runbooku z jiného runbooku.
Na řádku | Rutina | |
---|---|---|
Práce | Podřízené runbooky se spouštějí ve stejné úloze jako nadřazený objekt. | Pro podřízený runbook se vytvoří samostatná úloha. |
Spuštění | Nadřazený runbook před pokračováním čeká na dokončení podřízeného runbooku. | Nadřazený runbook pokračuje ihned po spuštění podřízeného runbooku. |
Výstup | Nadřazený runbook může přímo získat výstup z podřízeného runbooku. | Nadřazený runbook musí načíst výstup z podřízené úlohy runbooku. |
Parametry | Hodnoty pro parametry podřízeného runbooku jsou zadány samostatně a mohou používat libovolný datový typ. | Hodnoty pro podřízené parametry runbooku musí být sloučeny do jedné hashtable a mohou obsahovat pouze jednoduché datové typy, pole a objekty, které používají serializaci JSON. |
Publikování | Podřízený runbook musí být publikovaný před publikováním nadřazeného runbooku. | Podřízené runbooky musí být publikovány kdykoli předtím, než se spustí nadřazený runbook. |
Další kroky
- Seznamte se s runbooky automation.