Skip to main content

 路由器设置 > 新闻资讯 >

vmware view的多种接口

2013-10-10 00:20 浏览:

最近遇到一些客户的对view的自动化及监控的需求,但vmware 对view 的官方集成指南仅仅是提供了powershell的cmdlet,而且能实现的作用太少,效率太低下。

很是纠结,vsphere那边的vcenter的 sdk较为成熟,而且提供的接口足够满足客户的需求。

 

摸索了一番,总结下大概以下办法来实现vmware view的接口工作

一、 官方的powershell , 可参考《vmware view 集成指南》 ,相当简单,在VCS上实现直接运行powershell cmdlet就可以。 但有很多功能无法实现,例如:

 

1. view manager是可以实现从一个池中删除其中一个桌面,并可以选择是否从vcenter中删 除。但view powershell无法实现

 

 

2. 无法实现查看这台桌面目前所使用的快照是哪个?

例如:我的父虚拟机如果有两个快照

/octc1_datacenter_1/vm/parentvm_esxi01/snapshot01

/octc1_datacenter_1/vm/parentvm_esxi01/snapshot01/snapshot02

 

无法查看出这个桌面具体是使用的是哪个快照?

 

3. view策略可以针对到具体的池,而powerCLI无法实现。

 

二、通过view LDAP 进行操作 ,因为vmware VCS的核心实现其实是microsoft的LDS,LDS已经实现了分布式应用程序的配置存储,所以vmware view VCS的数据存储是使用AD LDS来做的,在VCS打开ADSI编辑器,打开dc=vdi,dc=vmware,dc=int路径

 

以下为powershell操作LDAP范例,请具体按自己实际情况调整。

 

function connect-ldap {

param($ldap)

$tmpObj = New-Object System.DirectoryServices.DirectoryEntry($ldap)

$tmpObj.psbase.Username=$username;

$tmpObj.psbase.Password=$password;

$tmpObj

}

 

 

function view-remove-desktop {

param($name)

$desktop = view-get-desktop $name

$desktopCN = $desktop.cn

$paeMemberDNOf = $desktop."pae-MemberDNOf" | extract_cn

if($paeMemberDNOf) {

$poolObj = view-get-pool -field cn -value $paeMemberDNOf

$newPae = ($poolObj."pae-MemberDN" | where {$_ -notmatch $desktopCN}) | %{ if($_) { $_.tostring() } }

if($newPae) { $poolObj."pae-MemberDN" = $newPae } else { $poolObj."pae-MemberDN" = @() }

try { $poolObj.commitchanges() } catch { throw $error[0] }

write "Removed $name from $($poolObj.cn)"

} else { write "Desktop not a member of any pools" }

}


 

 

三、可通过https请求模拟webclient对viewmanager的操作 ,先使用wireshark分析浏览器访问view manager的报文,使用AMF3协议进行post传参,抓取报文看response信息。(引用EMC clintonskitson的方法, 可以用java BlazeDS 调AMF3去操作 vmware view manager实现接口