VMware實現控制檯功能(VMware Remote Console)

說明:html

  剛開始一臉懵逼,google了一些資料,發現基本沒有能快速落地的,本身作完後梳理了一下發上來供你們參考。瀏覽器

   若是幫到你了,請點贊評論關注,以資鼓勵,多謝~app

 

  實現VMware控制檯功能主要有兩種方式,第一種是直接在Web頁面打開,第二種是使用VMware Remote Console官方工具打開控制檯;工具

  第一種用戶體驗更好,第二種開發起來更加方便快捷。因爲項目時間緣由,暫選擇第二種,後期迭代使用第一種方式。。。ui

簡述:google

  一、從vClient獲取一個VMRC協議的連接格式以下:spa

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

      主要有幾塊:VMRC協議標識、ticket、vClient地址、指定vm的morId。orm

  二、經過vClient clone Session,調用acquireCloneTicket() 獲取ticket,該ticket可在原Session失效後繼續使用;htm

  三、獲取vClient地址;

  四、獲取指定vm的ManageredObjectReference,即morId;

  五、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

相關文章
相關標籤/搜索