自动化 – Service Management Automation Runbook 聚焦 – 按优先级启动虚拟机(第 1 部分)

原文地址:https://blogs.technet.com/b/privatecloud/archive/2013/08/21/automation-service-management-automation-runbook-spotlight-virtual-machine-startup-by-priority-part-1.aspx

大家好!

到目前为止,尤其是如果大家阅读本文,那么很可能已经阅读过以下几篇博客文章:

如果没有阅读上述文章,强烈建议大家花些时间查看提供的介绍性内容。要学习本迷你系列文章的内容,需要事先安装和/或了解 Service Management Automation (SMA) 知识,因此这些文章很有价值,其实应当视为必备材料。


文章简介

这是 SMA Runbook 聚焦 - 按优先级启动虚拟机迷你系列的  1 部分(共 2 部分) 。最初,本文仅作为一篇独立文章发布,并提供了利用 PowerShell v3 工作流和 SMA 的简单“按优先级启动虚拟机”示例。接着,我发现了一种完成这项任务的略微复杂(而又优雅)的途径,那么为什么不提供两个例子作为从 Orchestrator 迁移至 SMA 和 PowerShell v3 工作流的敲门砖?

没错,与 Jim 一样,本文(以及第 2 部分)不仅会提供全新的 SMA/PSv3 工作流示例,而且还会通过示例本身串接 Orchestrator 与 SMA。

还记得这篇文章吗?自动化 – Orchestrator Runbook 聚焦 按优先级启动虚拟机

如果不记得,请查阅这篇文章,因为接下来我们将通过示例介绍从 Orchestrator 到 SMA 的过程…

继续介绍这个示例!

首先,正如前面所说,我们需要满足一些先决条件。接下来将会介绍利用。我们将运用自动化 – Service Management Automation – SMA Runbook 入门手册中列出的关键步骤运转相关示例所需执行的特定配置项目。

确保您的 SMA 环境正常使用

确保已事先安装 SMA。如果尚未安装,请参阅我们最初发布的介绍性文章,了解有关自动化 – Service Management Automation 简介的详细信息,然后再返回学习。

配置环境特定设置,从SMA 启动VMM 虚拟机

由于将会通过 PowerShell 远程处理功能访问 VMM,需要注意以下一些简单的必备步骤(以及一些针对 VMM Cloud 和 VM Startup Delay 的特定示例配置):

  • 准备VMM      SMA      执行Runbooks:转至 https://technet.microsoft.com/en-us/library/hh849694.aspx,确定是否需要配置 PS 远程处理;如果需要配置,如何在 SMA 和 VMM 系统上进行配置。我们已在自动化 — Service Management Automation – SMA Runbook 入门手册一文中简要介绍过这个问题。
  • VMM 中创建云及要启动的一组虚拟机:与在 Orchestrator 示例中一样,本示例解决方案基于云中的虚拟机。创建云并添加一些虚拟机,下面的示例中将需要提供云名称及其虚拟机。
  • 更新每个虚拟机的 “Delay start up (seconds)” :与在 Orchestrator 示例中一样,本示例解决方案根据每个虚拟机的 “Delayed Start” 值确定 “Startup Priority”。使用所需的 “Delayed Start” 值更新已创建的云中的每个虚拟机。

下载用于按优先级启动虚拟机(第 1 部分)的示例 SMA Runbook

您可以在以下位置查找示例 Runbook(TechNet Gallery 资源库):

SMA 示例 - 按优先级启动虚拟机( w/PowerShell v3 工作流)

BC-DLButtonDark
 
下载此 ZIP 文件并将 PowerShell 文件提取至 Windows Azure Pack (WAP)/SMA 控制台可访问的位置以便导入。导入过程如下所示。

通过 PowerShell 远程处理功能验证VMM 连接

用户连接 VMM 和启动虚拟机的帐户需要有权执行相应的操作。另外,还需要对使用 PowerShell 远程处理功能建立的 SMA 与 VMM 连接进行验证。

验证要使用的帐户权限和连接的简便方法是通过远程 Invoke-Command 与 VMM 建立类似的连接。在 SMA Runbook Worker 计算机的 PowerShell ISE 中执行简单脚本以验证是否具备必要权限(参见示例):

001 002 003 004 005 006 007 008 009 010 011 $cred = Get-Credential $VMMServer = "VMM01" Invoke-Command -ScriptBlock { param($VMMServer) Import-Module virtualmachinemanager Get-SCVMMServer -ComputerName $VMMServer } -ComputerName $VMMServer -Credential $cred -ArgumentList $VMMServer

注意由于 SMA 利用 PowerShell v3 工作流, Invoke-Command调用将需要更改为 InlineScript 调用。

如果成功通过测试,将会看到相应的连接和特定的 VMM 服务器信息,请参加以下示例 [成功] 输出:

image

Runbook 导入 SMA

如果对此流程存在任何疑问,请按照步骤 5 中列出的详细信息执行操作:自动化 — Service Management Automation – SMA Runbook 入门手册

导入后,您将会在 WAP/SMA 控制台的 AUTOMATION部分看到一系列与此项目有关的  ( 3 ) Runbook。验证可供查看的以下 Runbook(它们可以跨越多个页面,因此您可能必须单击页面 2、3 等以查看所有 Runbook)。

image

重新配置和测试 Runbooks

最后,重新配置 Runbook 变量以便与您的环境相匹配,然后在 WAP/SMA 控制台中测试示例解决方案。如果希望了解有关在 WAP/SMA 中执行 SMA Runbook 的详细信息,可在步骤 6 中了解进一步的详细信息:自动化 — Service Management Automation – SMA Runbook 入门手册一文。


SMA Runbook 概述

以下部分将介绍本示例解决方案中包含的每个 Runbook,以及它们与 Orchestrator 对应方案相比具有哪些优势。

Start-VMs-by-Priority

这是一个用于执行整项流程的顶级进程 Runbook。

  • 设置用于执行整项流程的变量
  • 从识别的 VMM Cloud 中收集一系列虚拟机(调用 Get-Cloud-VMs
  • 启动这一系列虚拟机(调用流经虚拟机列表的 Start-VMs
  • 收集并输出整体虚拟机状态
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 workflow Start-VMs-by-Priority { <# Project Name: Start VMs by Priority Runbook Name: Start-VMs-by-Priority Runbook Type: Process Runbook Tags: Type:Process, Proj:Start VMs by Priority Runbook Description: Process Runbook for the "Start VMs by Priority" Project Runbook Author: Charles Joy & Jim Britt Runbook Creation Date: 06/19/2013 #> $CloudName = "Primary Cloud" $PSCredName = "Contoso Creds" $VMMServer = "VMM01" $AllRunning = 0 $VMStartResult = "" $NotRunning = "" $VMList = Get-Cloud-VMs -CloudName $CloudName -PSCredName $PSCredName -VMMServer $VMMServer $VMDataItems = Start-VMs -CloudName $CloudName -PSCredName $PSCredName -VMList $VMList -VMMServer $VMMServer ForEach ($VMData in $VMDataItems) { $VMDataArray = $VMData.Split(':') $VMName = $VMDataArray[0] $VMState = $VMDataArray[1] if ($VMState -ne "Running") { $AllRunning += 1 $NotRunning += $VMName + "," } } if ($AllRunning -gt 0) { $VMStartResult = "$CloudName VMs Not Running: " + $NotRunning.Substring(0,$NotRunning.Length-1) } else { $VMStartResult = "All VMs in $CloudName are Running"} $VMStartResult }

 

注意需要谨记一点,上述 Contoso Creds 是一个 SMA 凭据变量。变量(凭据变量或其他变量)位于门户 AUTOMATION 区域的 RESOURCES 部分,并在此处进行创建。 SMA 凭据变量可让您在连接至环境内部资源时,创建和存储 PowerShell 凭据对象。随后,将可以通过名称进行引用(与上述方法相同),并在整个 Runbook 执行过程中利用,并且无需执行硬编码或提示。

image

进程级 Runbook 在 SMA 中的运行模式与在 Orchestrator 中完全相同。它们仍然是用于调用各种子例程 Runbook 的顶级 Runbook。从本质上控制 Runbook 执行流程。仔细阅读本文,我们将进程级 Runbook 作为下列最佳实践系列文章的一部分进行介绍:自动化 – System Center 2012 – Orchestrator 最佳实践系列 命名约定

Orchestrator 比较/对照

此 SMA Runbook 理念最初源自自动化 – Orchestrator Runbook 聚焦 按优先级启动虚拟机一文及相关 Orchestrator 示例。我们从本文中可以看出,虽然“外观”不同,但功能完全相同。因此,大家不必来回跳转查看这些文章,以下对 Orchestrator Runbook SMA 解决方案的相同进程级部分(按优先级启动虚拟机)进行了介绍:

image

注意上述SMA Runbook PowerShell 脚本)的突出显示区域表示Orchestrator Global Settings部分将要定义的变量。

与 Orchestrator 一样,我们将在整个 SMA Runbook 执行过程中使用这些变量。鉴于 SMA(PowerShell v3 工作流)的本质特征,这些变量均在进程级 Runbook 中定义,并根据需要传递至子例程 Runbook。此外,与 Orchestrator 大致相似,这些变量可以存储为全局设置,但在 SMA 中,则存储在门户 AUTOMATION 区域的 RESOURCES 部分。此示例仅简单利用 SMA 凭据变量,没有使用任何其他 SMA 变量 – 使用 SMA 变量需取决于您的解决方案需求。

Get-Cloud-VMs

此子例程 Runbook 基于识别的 VMM Cloud 收集虚拟机列表。

  • 使用进程      Runbook 中的参数提供连接信息:VMM Server 和 PS Credential Name (将与SMA 凭据变量一起使用)
  • 使用进程      Runbook 中的参数提供 VMM Cloud Name
  • 基于使用的      VMM      Cloud Name 连接并查询 VMM 以便查找虚拟机列表
  • 基于使用的 VMM      Cloud Name 返回虚拟机阵列
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 workflow Get-Cloud-VMs { <# Project Name: Start VMs by Priority Runbook Name: Get-Cloud-VMs Runbook Type: Sub-Runbook Runbook Tags: Type:Sub, Proj:Start VMs by Priority Runbook Description: Sub-Runbook for the "Start VMs by Priority" Project Runbook Author: Charles Joy & Jim Britt Runbook Creation Date: 06/19/2013 #> param( [string]$VMMServer, [string]$CloudName, [string]$PSCredName ) $PSUserCred = Get-AutomationPSCredential -Name $PSCredName $VMList = InlineScript { Import-Module virtualmachinemanager $Cloud = Get-SCCloud -Name $Using:CloudName -VMMServer $Using:VMMServer $VMList = Get-SCVirtualMachine -Cloud $Cloud | Select Name Return $VMList.Name } -pscomputername $VMMServer -psCredential $PSUserCred $VMList }

Orchestrator 比较/对照

下列进程级 Orchestrator Runbook 的突出显示部分表示此 SMA 解决方案示例的子例程级别部分的 (Get-Cloud-VMs) 的范围:

image

Start-VMs

此子例程 Runbook 包含一系列虚拟机,并根据特定的虚拟机配置启动虚拟机。

  • 使用进程      Runbook 中的参数提供连接信息:VMM Server 和 PS Credential Name (将与SMA 凭据变量一起使用)
  • 使用进程      Runbook 中的参数提供 VMM Cloud Name
  • 使用进程      Runbook 中的参数提供虚拟机列表
  • 连接      VMM      并基于每个虚拟机中配置的      “Delay start up (seconds)” 启动虚拟机
  • 基于每个虚拟机执行的      Start      命令返回虚拟机阵列及其状态
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 workflow Start-VMs { <# Project Name: Start VMs by Priority Runbook Name: Start-VMs Runbook Type: Sub-Runbook Runbook Tags: Type:Sub, Proj:Start VMs by Priority Runbook Description: Sub-Runbook for the "Start VMs by Priority" Project Runbook Author: Charles Joy & Jim Britt Runbook Creation Date: 06/19/2013 #> param( [string[]]$VMList, [string]$VMMServer, [string]$CloudName, [string]$PSCredName ) $PSUserCred = Get-AutomationPSCredential -Name $PSCredName $VMStatus=@() ForEach -Parallel ($VM in $VMList) { $VMReturnData = InlineScript { Import-Module virtualmachinemanager $Cloud = Get-SCCloud -Name $Using:CloudName -VMMServer $Using:VMMServer $VMName = $Using:VM $VMData = Get-SCVirtualMachine -Name $VMName -Cloud $Cloud if ($VMData.Status -ne "Running") { $VMDelayStart = $VMData.DelayStart Start-Sleep -S $VMDelayStart $VMStartReturn = Start-SCVirtualMachine $VMData $VMStartReturn.Status } else { $VMData.Status } } -psComputerName $VMMServer -psCredential $PSUserCred $Workflow:VMStatus += $VM +":"+ $VMReturnData.Value } Return $VMStatus }

Orchestrator 比较/对照

下列子例程级 Orchestrator Runbook 表示此 SMA 解决方案示例的子例程级部分 (Start-VMs):

image

示例解决方案 VM Delay Start Up (seconds) 配置屏幕捕获(取自 VMM 控制台):

虽然以下屏幕截图最初源自自动化 – Orchestrator Runbook 聚焦 按优先级启动虚拟机一文,它们与上述“更新每个虚拟机的 “Delay start up (seconds)” 值”先决条件部分直接相关,因此,为方便起见在此提供:

VM - spftest03 (优先级3 ):

VM - spftest02 (优先级 2 ):

VM - spftest01 (优先级 1 ):


介绍完毕!希望本文提供的内容对大家有所帮助,本文概括介绍了 SMA 端到端示例解决方案,以及它与 Orchestrator 实现的功能之间的比较结果!感谢阅读!

如果希望了解更多 SMA 和 PowerShell v3 工作流示例,请务必查阅以下列表(随着提供更多示例不断更新):

有关 SMA 的更多信息、提示/窍门和示例解决方案,请查阅自动化跟踪系列未来发布的其他博客文章!

敬请查阅!