yinl_li 发表于 2018-6-6 13:43:59

vmware view 的多种接口

  最近遇到一些客户的对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 }
  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实现接口
  

  第三种方式参考 http://velemental.com/2012/01/31/powershell-and-adobe-amf3/
页: [1]
查看完整版本: vmware view 的多种接口