VMware实现控制台功能(VMware Remote Console)

说明:

  刚开始一脸懵逼,google了一些资料,发现基本没有能快速落地的,自己做完后梳理了一下发上来供大家参考。

   如果帮到你了,请点赞评论关注,以资鼓励,多谢~

 

  实现VMware控制台功能主要有两种方式,第一种是直接在Web页面打开,第二种是使用VMware Remote Console官方工具打开控制台;

  第一种用户体验更好,第二种开发起来更加方便快捷。由于项目时间原因,暂选择第二种,后期迭代使用第一种方式。。。

简述:

  1、从vClient获取一个VMRC协议的链接格式如下:

      vmrc://  clone:[VC-TICKET]  @  [VC]  /?  moid=[VM-MOREF-ID]

      主要有几块:VMRC协议标识、ticket、vClient地址、指定vm的morId。

  2、通过vClient clone Session,调用acquireCloneTicket() 获取ticket,该ticket可在原Session失效后继续使用;

  3、获取vClient地址;

  4、获取指定vm的ManageredObjectReference,即morId;

  5、VMware Remote Console在安装时会向系统注册,浏览器通过URL自动解析,调用该工具,将2-4步中获取的三个参数传入VMware Remote Console从而实现控制台登录。

 

代码如下;

  

 1 public class ConsoleHandler {
 2     private static Logger logger = LoggerFactory.getLogger(ConsoleHandler.class);
 3 
 4     public String buildVMRCUrl(String vmName) {
 5         StringBuilder sb = new StringBuilder();
 6         String VMRC = "vmrc://clone:";
 7 
 8         ServiceInstance serviceInstance = null;
 9         try {
10             serviceInstance = CommonUtils.createServiceInstance();
11         } catch (MalformedURLException | RemoteException e) {
12             logger.error("createServiceInstance error.", e);
13         }
14         String ticket = getTicket(serviceInstance);
15         String vcHost = CommonUtils.getVcHost();
16         String moid = getMoid(vmName, serviceInstance);
17         return sb.append(VMRC).append(ticket).append("@").append(vcHost).append("/?moid=").append(moid).toString();
18     }
19 
20     private String getTicket(ServiceInstance serviceInstance) {
21         String ticket = null;
22         try {
23             ticket = serviceInstance.getSessionManager().acquireCloneTicket();
24         } catch (RemoteException e) {
25             logger.error("acquireCloneTicket error", e);
26         }
27         return ticket;
28     }
29 
30 
31     private String getMoid(String vmName, ServiceInstance si) {
32         VirtualMachine vm;
33         String moid = null;
34         try {
35             vm = (VirtualMachine) new InventoryNavigator(si.getRootFolder()).searchManagedEntity("VirtualMachine",
36                     vmName);
37             moid = vm.getMOR().getVal();
38         } catch (RemoteException e) {
39             e.printStackTrace();
40         }
41         return moid;
42     }
43 }

获取ServiceInstance、ticket ( acquireCloneTicket() )的方法见之前的文章,再次推荐该SDK,棒棒哒~~~

https://www.cnblogs.com/AzkbanHan/p/10024397.html

 

posted @ 2018-12-05 16:54  阿兹卡班班长  阅读(8864)  评论(0编辑  收藏  举报