Partilhar via


Runbooks filho no Service Management Automation

É uma prática recomendada no SMA (Service Management Automation) escrever runbooks modulares reutilizáveis com uma função discreta que pode ser usada por outros runbooks. Um runbook pai geralmente chamará um ou mais runbooks filho para executar a funcionalidade necessária. Há duas maneiras de chamar um runbook filho, e cada uma tem diferenças distintas que você deve entender para que possa determinar qual será a melhor para seus diferentes cenários.

Invocar um runbook filho usando a execução integrada

Para invocar um runbook embutido de outro runbook, use o nome do runbook e forneça valores para os parâmetros exatamente como você faria ao usar uma atividade ou um cmdlet. Todos os runbooks no mesmo ambiente SMA estão disponíveis para todos os outros para serem usados dessa maneira. O runbook pai aguardará o runbook filho concluir antes de passar para a próxima linha e nenhuma saída é retornada diretamente para o pai.

Quando você chama um runbook embutido, ele é executado no mesmo trabalho que o runbook pai. Não haverá nenhuma indicação no histórico de trabalho do runbook filho de que ele foi executado. Todas as exceções e fluxos de saída do runbook filho serão associados ao pai. Isso resulta em menos trabalhos e os torna mais fáceis de rastrear e solucionar problemas, pois todas as exceções geradas pelo runbook filho e quaisquer saídas de fluxo associadas ao trabalho do runbook pai.

Quando um runbook é publicado, quaisquer eventuais runbooks filho chamados por ele já devem ter uma versão publicada. Isso ocorre porque a Automação cria uma associação com qualquer runbook filho quando um runbook é compilado. Se não estiverem, o runbook pai parecerá publicar corretamente, mas gerará uma exceção quando for iniciado. Se isso acontecer, você poderá republicar o runbook pai para referenciar corretamente os runbooks filhos. Você não precisará republicar o runbook pai se qualquer um dos runbooks filho for alterado porque a associação já terá sido criada.

Os parâmetros de um runbook filho chamado embutido podem ser qualquer tipo de dados, incluindo objetos complexos, e não há serialização JSON como ocorre quando você inicia o runbook usando o Portal de Gerenciamento ou com o cmdlet Start-SmaRunbook.

Tipos de runbook

Um runbook só pode usar outro runbook do mesmo tipo que um runbook filho usando a execução embutida. Isso significa que um runbook de fluxo de trabalho do PowerShell não pode usar um runbook do PowerShell como filho usando a execução embutida e um runbook do PowerShell não pode usar um runbook de fluxo de trabalho do PowerShell.

Ao chamar um runbook filho do Fluxo de Trabalho do PowerShell usando a execução embutida, você apenas usa o nome do runbook. Ao chamar um runbook filho do PowerShell, você deve preceder seu nome com .\ para especificar que o script está localizado no diretório local.

Exemplo

O exemplo a seguir invoca um runbook filho de teste que aceita três parâmetros, um objeto complexo, um número inteiro e um valor booleano. A saída do runbook filho é atribuída a uma variável. Nesse caso, o runbook filho é um runbook de Fluxo de Trabalho do PowerShell.

$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true

Veja a seguir o mesmo exemplo usando um runbook de script do PowerShell como filho.

$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true

Iniciar um runbook filho usando cmdlets

Você pode usar o cmdlet Start-SMARunbook para iniciar um runbook com o Windows PowerShell. Quando você inicia um runbook filho por meio de um cmdlet, o runbook pai será movido para a próxima linha assim que o trabalho for criado para o runbook filho. Se você precisa recuperar qualquer saída do runbook, você precisa acessar o trabalho usando Get-SMAJobOutput.

O trabalho de um runbook filho iniciado com um cmdlet executará um trabalho separado do runbook pai. Isso resulta em mais trabalhos do que invocar o fluxo de trabalho embutido, aumentando a sobrecarga no servidor de trabalho e tornando-os mais difíceis de rastrear. O pai pode iniciar vários runbooks filho sem esperar que cada um seja concluído. Para a mesma variante de execução paralela que chama runbooks filho embutidos, o runbook pai precisaria usar a palavra-chave paralela.

Parâmetros de um runbook filho iniciados com um cmdlet são fornecidos como uma tabela de hash, conforme descrito em Parâmetros de Runbook. Somente os tipos de dados simples podem ser usados, embora você possa fornecer o nome de um ativo de credencial, conforme descrito em Credentials. Se o runbook tiver um parâmetro com um tipo de dados complexos, ele deve ser chamado embutido.

O exemplo a seguir inicia um runbook filho com parâmetros e, em seguida, aguarda a conclusão deste. Depois de concluído, a saída é coletada do trabalho pelo runbook pai.

$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

Comparar métodos para chamar um runbook filho

A tabela a seguir resume as diferenças entre os dois métodos para chamar um runbook de outro runbook.

Embutido Cmdlet
Trabalho Os runbooks filhos são executados no mesmo trabalho que o pai. Um trabalho separado é criado para o runbook filho.
Execução O runbook pai aguarda a conclusão do runbook filho antes de continuar. Runbook pai continua imediatamente após o runbook filho ser iniciado.
Saída O runbook pai pode obter saída diretamente do runbook filho. O runbook pai deve recuperar a saída por meio do trabalho do runbook filho.
Parâmetros Os valores para os parâmetros de runbook filho são especificados separadamente e podem usar qualquer tipo de dados. Os valores dos parâmetros do runbook filho devem ser combinados em uma única tabela de hash e só podem incluir tipos de dados simples, de matriz e de objeto que usam a serialização JSON.
Publicação O runbook filho deve ser publicado antes da publicação do runbook pai. O runbook filho deve ser publicado a qualquer momento antes que um runbook pai seja iniciado.

Próximas etapas

  • Saiba mais sobre runbooks de automação.