Partager via


Démarrage d'un Runbook à partir d'un autre Runbook

 

Publication: mars 2016

S'applique à: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator

Il est recommandé dans Service Management Automation 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 exécuter les fonctionnalités demandées. Il existe deux façons d'appeler un Runbook enfant. Chacune présente des différences que vous devez comprendre pour pouvoir déterminer celle qui convient le mieux à vos scénarios.

  • Appel d'un Runbook enfant à l'aide de l'exécution inline

  • Démarrage d'un Runbook enfant à l'aide d'une applet de commande

Appel d'un Runbook enfant à l'aide de l'exécution inline

Pour appeler un Runbook inline à partir d'un autre Runbook, vous devez utiliser le nom du Runbook et fournir des valeurs pour ses paramètres, comme pour une activité ou une applet de commande. Tous les Runbooks du même environnement Service Management Automation peuvent être utilisés par tous les autres de cette manière. Le Runbook parent attend la fin de l'exécution du Runbook enfant avant de passer à la ligne suivante. Par ailleurs, les sorties sont retournées directement au parent.

Quand vous appelez un Runbook inline, il s'exécute dans le même travail que le Runbook parent. Il n'y a aucune indication dans l'historique des travaux sur le Runbook enfant qu'il a exécuté. Les exceptions et les sorties de flux du Runbook enfant sont associées au parent. Cela entraîne un nombre moins élevé de travaux. En outre, leur suivi et la résolution de leurs problèmes sont plus faciles, car les exceptions levées par le Runbook enfant et sa sortie de flux sont associées au travail du Runbook parent.

Quand un Runbook est publié, les Runbooks enfants qu'il appelle doivent déjà disposer d'une version publiée. En effet, Automatisation crée une association avec les Runbooks enfants quand un Runbook est compilé. Si ce n'est pas le cas, le Runbook parent donne l'impression d'être publié correctement. Toutefois, il génère une exception quand il démarre. Si cela se produit, vous pouvez republier le Runbook parent pour référencer correctement les Runbooks enfants. Il est inutile de republier le Runbook parent si les Runbooks enfants sont modifiés, car l'association est déjà créée.

Les paramètres d'un Runbook enfant appelé de manière inline peuvent être de n'importe quel type de données, y compris celui d'objets complexes. Par ailleurs, il n'existe aucune sérialisation JSON quand vous démarrez le Runbook à l'aide du Portail de gestion ou à l'aide de l'applet de commande Start-SmaRunbook.

L'exemple suivant 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.

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

Démarrage d'un Runbook enfant à l'aide d'une applet de commande

L'applet de commande Start-SMARunbook permet de démarrer un Runbook, comme décrit dans 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.

Le travail d'un Runbook enfant démarré à l'aide d'une applet de commande s'exécute dans un travail distinct de celui du Runbook parent. Il en résulte un accroissement des travaux par rapport à un appel du flux de travail inline et une augmentation du traitement sur le serveur Worker, ce qui rend le suivi plus difficile. Le parent peut démarrer plusieurs Runbooks enfants sans devoir attendre la fin de chacun d'entre eux. Pour que ce même type d'exécution parallèle appelle les Runbooks enfants, le Runbook parent doit utiliser le mot clé parallel.

Les paramètres d'un Runbook enfant démarré à l'aide d'une applet de commande sont fournis sous forme de table de hachage, comme indiqué dans Paramètres d'un 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 Informations d'identification. Si le Runbook possède un paramètre avec un type de données complexe, il doit être appelé de manière inline.

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

Comparaison des méthodes d'appel d'un Runbook enfant

Le tableau suivant résume les différences entre les deux méthodes d'appel d'un Runbook à partir d'un autre Runbook.

Inline

Applet de commande

Travail

Les Runbooks enfants s'exécutent dans le même travail que le parent.

Un travail distinct est créé pour le Runbook enfant.

Exécution

Le Runbook parent attend la fin du Runbook enfant pour 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 tous les types de données.

Les valeurs des paramètres du Runbook enfant doivent être combinées dans une table de hachage unique. En outre, elles ne peuvent inclure que les types de données simples, tableau et Objet, qui tirent parti de la sérialisation JSON.

Publication

Le Runbook enfant doit être publié avant le Runbook parent.

Le Runbook enfant doit être publié à tout moment avant le démarrage du Runbook parent.