Runbooks enfants dans Service Management Automation
Il est recommandé dans Service Management Automation (SMA) d’écrire des runbooks réutilisables et modulaires avec une fonction discrète qui peut être utilisée par d’autres runbooks. Un runbook parent appelle souvent un ou plusieurs runbooks enfants pour effectuer les fonctionnalités requises. Il existe deux façons d’appeler un runbook enfant, et chacun a des différences distinctes que vous devez comprendre afin que vous puissiez déterminer ce qui sera le meilleur pour vos différents scénarios.
Appeler un Runbook enfant à l’aide de l’exécution incluse
Pour appeler un Runbook en ligne à partir d’un autre Runbook, vous utilisez le nom du Runbook et définissez des valeurs pour ses paramètres de la même façon qu’avec une activité ou une applet de commande. Tous les runbooks dans le même environnement SMA sont disponibles pour tous les autres à utiliser de cette manière. Le Runbook parent attend la fin de l’exécution du Runbook enfant avant de passer à la ligne suivante, et toute sortie est retournée directement au parent.
Lorsque vous appelez un Runbook en ligne, il est exécuté dans la même tâche que le Runbook parent. L’historique des tâches du Runbook enfant n’indique pas qu’il a été exécuté. Toutes les exceptions et sorties de flux issues du Runbook enfant seront associées au parent. Cela entraîne moins de travaux et facilite le suivi et la résolution des problèmes, car toutes les exceptions levées par le runbook enfant et toutes les sorties de flux associées au travail de runbook parent.
Quand un Runbook est publié, les Runbooks enfants qu'il appelle doivent déjà disposer d'une version publiée. Cela est dû au fait que Automation crée une association avec tous les runbooks enfants lorsqu’un runbook est compilé. Si ce n’est pas le cas, le runbook parent semble publier correctement, mais il génère une exception au démarrage. Dans ce cas, vous pouvez republier le Runbook parent pour référencer correctement les Runbooks enfants. Vous n’avez pas besoin de republier le runbook parent si l’un des runbooks enfants est modifié, car l’association aura déjà été créée.
Les paramètres d’un runbook enfant appelé inline peuvent être n’importe quel type de données, y compris les objets complexes, et il n’existe aucune sérialisation JSON, car vous démarrez le runbook à l’aide du portail de gestion ou avec l’applet de commande Start-SmaRunbook .
Types de runbook
Un runbook ne peut utiliser qu’un autre runbook du même type qu’un runbook enfant à l’aide de l’exécution inline. Cela signifie qu’un runbook PowerShell Workflow ne peut pas utiliser un runbook PowerShell en tant qu’enfant à l’aide de l’exécution inline et qu’un runbook PowerShell ne peut pas utiliser un runbook PowerShell Workflow.
Lorsque vous appelez un runbook enfant PowerShell Workflow à l’aide de l’exécution inline, vous utilisez simplement le nom du runbook. Lorsque vous appelez un runbook enfant PowerShell, vous devez précéder son nom avec .\ pour spécifier que le script se trouve dans le répertoire local.
Exemple
Dans l’exemple suivant, on appelle un Runbook enfant de test qui accepte trois paramètres : un objet complexe, un entier et une valeur booléenne. La sortie du Runbook enfant est affectée à une variable. Dans ce cas, le runbook enfant est un runbook de workflow PowerShell.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = Test-ChildRunbook -VM $vm -RepeatCount 2 -Restart $true
Voici le même exemple d’utilisation d’un runbook de script PowerShell que l’enfant.
$vm = Get-VM -Name "MyVM" -ComputerName "MyServer"
$output = .\Test-ChildRunbook.ps1 -VM $vm -RepeatCount 2 -Restart $true
Démarrer un runbook enfant à l’aide d’applets de commande
Vous pouvez utiliser l’applet de commande Start-SMARunbook pour démarrer un runbook avec Windows PowerShell. Quand vous démarrez un Runbook enfant à partir d'une applet de commande, le Runbook parent se déplace à la ligne suivante, dès que le travail est créé pour le Runbook enfant. Si vous devez récupérer la sortie du Runbook, vous devez accéder au travail via Get-SMAJobOutput.
La tâche issue d’un Runbook enfant démarré avec une applet de commande est exécutée dans une tâche distincte du Runbook parent. Cela entraîne davantage de travaux que d’appeler le flux de travail inline, d’augmenter la surcharge sur le serveur worker et de les rendre plus difficiles à suivre. Le parent peut démarrer plusieurs runbooks enfants sans attendre que chacun se termine. Pour ce même type d’exécution en parallèle avec appel des runbooks enfants en ligne, le runbook parent doit utiliser le mot clé parallèle.
Les paramètres d’un runbook enfant démarré avec une applet de commande sont fournis sous forme de table de hachage, comme décrit dans Paramètres du runbook. Seuls les types de données simples peuvent être utilisés. Toutefois, vous pouvez fournir le nom d'une ressource d'informations d'identification, comme indiqué dans Credentials. Si le Runbook possède un paramètre avec un type de données complexe, il doit être appelé en ligne.
L'exemple suivant démarre un Runbook enfant avec des paramètres, puis attend qu'il se termine. Une fois terminé, sa sortie est collectée à partir du travail par le Runbook parent.
$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
Comparer les méthodes d’appel d’un runbook enfant
Le tableau suivant résume les différences entre les deux méthodes applicables pour appeler un Runbook à partir d’un autre Runbook.
Intraligne | Applet de commande | |
---|---|---|
Travail | Les Runbooks enfants s’exécutent dans la même tâche que le parent. | Une tâche distincte est créée pour le Runbook enfant. |
Exécution | Le Runbook parent attend la fin de l’exécution du Runbook enfant avant de se poursuivre. | Le Runbook parent se poursuit immédiatement après le démarrage du Runbook enfant. |
Sortie | Le Runbook parent peut obtenir directement la sortie du Runbook enfant. | Le Runbook parent doit récupérer la sortie du travail du Runbook enfant. |
Paramètres | Les valeurs des paramètres du Runbook enfant sont spécifiées séparément et peuvent utiliser n’importe quel type de données. | Les valeurs des paramètres de runbook enfant doivent être combinées dans une table de hachage unique et peuvent inclure uniquement des types de données simples, matricielles et d’objets qui utilisent la sérialisation JSON. |
Publication | Le Runbook enfant doit être publié avant la publication du Runbook parent. | Le runbook enfant doit être publié à tout moment avant le démarrage d’un runbook parent. |
Étapes suivantes
- Découvrez les runbooks Automation.