简介
在这里我为大家介绍一下新的XenServer PowerShell snap-in 功能。使用一个简单的虚拟机关联(chained)启动的例子:即等待一个虚拟机启动完毕后该虚拟机才开始启动。
在这个例子中,我们使用XenServer工具来检测启动是否已经完毕:即一旦虚拟机的IP已绑定,我们就认为该虚拟机已经准备就绪。当然你也可以把这个条件设地更复杂一点,例如等待一个域控制器启动后再开始启动。但在这个例子中不作深入讨论。
在第一个截图上,我用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在管道中取得虚拟机的信息。然后像下面那样一次性的处理它们:
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)
}
}
使用
使用此脚本非常的简单:
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
这是一个简单的例子,当然你可以作适当的改动以符合你的环境,但我希望这个例子可以作为一个好的开始。
Discussion
No comments for “XenServerPSSnapin演示 – 虚拟机的关联启动”
Post a comment