// you are reading...

Citrix

XenServerPSSnapin演示 – 虚拟机的关联启动

简介

在这里我为大家介绍一下新的XenServer PowerShell snap-in 功能。使用一个简单的虚拟机关联(chained)启动的例子:即等待一个虚拟机启动完毕后该虚拟机才开始启动。

在这个例子中,我们使用XenServer工具来检测启动是否已经完毕:即一旦虚拟机的IP已绑定,我们就认为该虚拟机已经准备就绪。当然你也可以把这个条件设地更复杂一点,例如等待一个域控制器启动后再开始启动。但在这个例子中不作深入讨论。

start-vm.jpg

在第一个截图上,我用XenCenter 5.0与XenServer 5.0虚拟池相连,开启XS-PS,并运行本例子中的脚本,Start-VM.Wait.ps1 。 至于PowerShell的安装不再这里罗嗦了,并确定设置了ExecutionPolicy为RemoteSigned。

命名空间和Initialize-XenServer:Aliases

首先,我们简短的来描述一下如何在XS-PS里处理命名空间。

很多Xen API的名字都很容易理解,如cmdlet “Create-Message”是创建消息。XenServer的cmdlets在XenServer的命名空间如下:

Create-XenServer:VM
Destroy-XenServer:VM
Get-XenServer:VM
Get-XenServer:VM.NameLabel
Set-XenServer:VM.NameLabel
Invoke-XenServer:VM.Start

这对想在混合环境下使用XS-PS非常有用,但该快速脚本显然有一点冗长,所以新增了别名功能。在Start-VM.Wait处理模块,你可以看到下面的应用:

Initialize-XenServer:Aliases Start

这样就导入了整个别名集,我们就可以使用下面的简短名了:

Create-VM
Destroy-VM
Get-VM
Get-VM.NameLabel
Set-VM.NameLabel
Start-VM

这些别名的有效范围是在此脚本内,因此他们不会影响其他的用户环境。你可以通过-Scope参数将它们设为全局有效。

Initialize-XenServer:Aliases实际支持三种类型的别名,你可以选择最适合你环境的类型,或者你愿意可以使用全名。

PS C:\Users\Ewan Mellor> Initialize-XenServer:Aliases
Invoke-Xen = Get-Xen:VM / Invoke-Xen:VM.Start
Invoke = Get-VM / Invoke-VM.Start
Start = Get-VM / Start-VM

Start-VM.Wait

Start-VM.Wait在管道中取得虚拟机的信息。然后像下面那样一次性的处理它们:

  • 如果VM的记录代表的是控制域,或者一个模板,就跳过。
  • 如果VM无法启动(因为它已经运行了),记录到日志文件并跳过。
  • 否则,调用Start-VM。这将等待直到VM的进程开始启动。
  • 下一步,为VM的启动等待5分钟。等待VM.guest_metrics有效,并可以进入VM_guest_metrics.networks 。一旦有记录在这里,我们认为XenServer工具已经准备就绪,并该虚拟机的IP地址已经配置完毕(例如从DHCP服务器)。
  • 如果5分钟后还没有有效的数据,那么显示警告信息并进入下一VM的处理。

function Start-VM.Wait
{
begin
{
$timeout = 5 * 60 * 1000
Initialize-XenServer:Aliases Start
}
process
{
if ($_.is_a_template -or $_.is_control_domain)
{
return
}
if ($_.allowed_operations -notcontains “start”)
{
Write-Warning(“{0} cannot be started” -f $_.name_label)
return
}

Write-Verbose(“Starting {0}…” -f $_.name_label)
Start-VM $_

for ($count = 0; $count -le $timeout / 500; $count += 1)
{
$metrics = Get-VM.GuestMetrics $_
if ($metrics -ne $null -and $metrics.networks.Count -gt 0)
{
Write-Verbose(“VM {0} started” -f $_.name_label)
return
}
Start-Sleep -m 500
}

Write-Warning(“Timeout starting {0}” -f $_.name_label)
}
}

使用

start-vm2.jpg

使用此脚本非常的简单:

  1. 点(.)然后脚本名
  2. 设置$VerbosePreference为”Continue”,只是为了该演示。
  3. 连接到主服务器。
  4. 选择你要启动的虚拟机(在本例中,所有标记为“Production”的) 。
  5. 用管道功能使所有的VM进入Start-VM.Wait
  6. 演示开始
  7. 结束后退出你的服务器。

PS> . .\Start-VM.Wait.ps1
PS> $VerbosePreference = “Continue”
PS> Connect-XenServer -url https://
PS> Get-XenServer:VM -Tags Production | Start-VM.Wait

PS> Disconnect-XenServer

这是一个简单的例子,当然你可以作适当的改动以符合你的环境,但我希望这个例子可以作为一个好的开始。

Start-VM.Wait.ps1脚本可以在这里下载

Bookmark and Share

Discussion

No comments for “XenServerPSSnapin演示 – 虚拟机的关联启动”

Post a comment