Iniciar un runbook desde otro runbook
Publicada: marzo de 2016
Se aplica a: Windows Azure Pack for Windows Server, System Center 2012 R2 Orchestrator
En Automatización de administración de servicios, el procedimiento recomendado es escribir runbooks modulares reutilizables con una función independiente que otros runbooks puedan utilizar. Normalmente, un runbook primario llamará a uno o varios runbooks secundarios para llevar a cabo la función requerida. Hay dos maneras de llamar a un runbook secundario, y cada una presenta diferencias que debe conocer para poder determinar cuál es la mejor para los diferentes escenarios.
Invocar un runbook secundario mediante ejecución insertada
Iniciar un runbook secundario con cmdlets
Invocar un runbook secundario mediante ejecución insertada
Para invocar un runbook insertado desde otro runbook, utilice el nombre del runbook y proporcione los valores de sus parámetros exactamente igual que haría con una actividad o un cmdlet. Todos los runbooks del mismo entorno de Automatización de administración de servicios están disponibles para que todos los demás los usen de esta manera. El runbook primario esperará a que el runbook secundario se complete antes de pasar a la siguiente línea, y la salida se devuelve directamente al primario.
Al invocar un runbook insertado, se ejecuta en el mismo trabajo que el runbook primario. En el historial de trabajos del runbook secundario no habrá ninguna indicación de que se ejecutó. Las excepciones y las salidas de los flujos del runbook secundario se asociarán con el primario. Esto permite reducir el número de trabajos y facilita el seguimiento y la solución de problemas porque las posibles excepciones producidas por el runbook secundario y las salidas de los flujos están asociadas con el trabajo del runbook primario.
Cuando se publica un runbook, los runbooks secundarios a los que llama deben tener ya una versión publicada. El motivo es que Automatización crea una asociación con los runbooks secundarios cuando un runbook se compila. Si no la tienen, parecerá que el runbook primario se publica correctamente, pero generará una excepción cuando se inicie. Si esto ocurre, puede volver a publicar el runbook primario para hacer referencia correctamente a los runbooks secundarios. No es necesario volver a publicar el runbook primario si se cambia alguno de los runbooks secundarios porque ya se habrá creado la asociación.
Los parámetros de un runbook secundario al que se llama en línea pueden ser de cualquier tipo de datos, incluidos objetos complejos, y no se produce ninguna serialización de JSON como cuando el runbook se inicia con el Portal de administración o con el cmdlet Start-SmaRunbook.
En el ejemplo siguiente se invoca un runbook secundario de prueba que acepta tres parámetros: un objeto complejo, un entero y un valor booleano. La salida del runbook secundario se asigna a una variable.
$vm = Get-VM –Name "MyVM" –ComputerName "MyServer"
$output = Test-ChildRunbook –VM $vm –RepeatCount 2 –Restart $true
Iniciar un runbook secundario con cmdlets
Puede utilizar el cmdlet Start-SMARunbook para iniciar un runbook, tal y como se describe en Para iniciar un runbook con Windows PowerShell. Cuando se inicia un runbook secundario desde un cmdlet, el runbook primario pasará a la siguiente línea en cuanto se cree el trabajo para el runbook secundario. Si necesita recuperar todas las salidas del runbook, debe acceder al trabajo mediante Get SMAJobOutput.
El trabajo de un runbook secundario iniciado con un cmdlet se ejecutará en un trabajo diferente del runbook primario. El resultado es que aumenta el número de trabajos que invocan el flujo de trabajo en línea, aumenta la carga en el servidor Worker y se dificulta el seguimiento. Sin embargo, el elemento primario puede iniciar varios runbooks secundarios sin tener que esperar a que se completen. Para ese mismo tipo de ejecución en paralelo con llamadas en línea a los runbooks secundarios, el runbook primario tendría que usar la palabra clave parallel.
Los parámetros para un runbook secundario que se inicia con un cmdlet se proporcionan como una tabla hash, tal y como se describe en Runbook Parameters. Solo se pueden usar tipos de datos simples, aunque puede proporcionar el nombre de un activo de credencial tal y como se describe en Credentiales. Si el runbook tiene un parámetro con un tipo de datos complejo, debe llamarse en línea.
En el ejemplo siguiente se inicia un runbook secundario con parámetros y se espera a que finalice. Una vez completado, el runbook primario recopila la salida del trabajo.
$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
Comparación de métodos para llamar a un runbook secundario
En la tabla siguiente se resumen las diferencias entre los dos métodos para llamar a un runbook desde otro runbook.
En línea |
Cmdlet |
|
---|---|---|
Trabajo |
Los runbooks secundarios se ejecutan en el mismo trabajo que el primario. |
Se crea un trabajo independiente para el runbook secundario. |
Ejecución |
El runbook primario espera a que el runbook secundario se complete antes de continuar. |
El runbook primario continúa inmediatamente después de que el runbook secundario se inicie. |
Salida |
El runbook primario puede obtener la salida directamente del runbook secundario. |
El runbook primario debe recuperar la salida del trabajo del runbook secundario. |
Parámetros |
Los valores de los parámetros del runbook secundario se especifican por separado y pueden utilizar cualquier tipo de datos. |
Los valores de los parámetros del runbook secundario deben combinarse en una sola tabla hash y solo pueden incluir tipos de datos simples, de matriz y de objeto que utilicen la serialización de JSON. |
Publicación |
El runbook secundario debe publicarse antes de que se publique el runbook primario. |
El runbook secundario debe publicarse antes de que se inicie el runbook primario. |
Vea también
Para iniciar un Runbook con Windows PowerShell
Creación de runbooks [SMA]
Ampliación de Service Management Automation con Runbooks