说明:

  刚开始一脸懵逼,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从而实现控制台登录。

代码如下;

  

 public class ConsoleHandler {
private static Logger logger = LoggerFactory.getLogger(ConsoleHandler.class); public String buildVMRCUrl(String vmName) {
StringBuilder sb = new StringBuilder();
String VMRC = "vmrc://clone:"; ServiceInstance serviceInstance = null;
try {
serviceInstance = CommonUtils.createServiceInstance();
} catch (MalformedURLException | RemoteException e) {
logger.error("createServiceInstance error.", e);
}
String ticket = getTicket(serviceInstance);
String vcHost = CommonUtils.getVcHost();
String moid = getMoid(vmName, serviceInstance);
return sb.append(VMRC).append(ticket).append("@").append(vcHost).append("/?moid=").append(moid).toString();
} private String getTicket(ServiceInstance serviceInstance) {
String ticket = null;
try {
ticket = serviceInstance.getSessionManager().acquireCloneTicket();
} catch (RemoteException e) {
logger.error("acquireCloneTicket error", e);
}
return ticket;
} private String getMoid(String vmName, ServiceInstance si) {
VirtualMachine vm;
String moid = null;
try {
vm = (VirtualMachine) new InventoryNavigator(si.getRootFolder()).searchManagedEntity("VirtualMachine",
vmName);
moid = vm.getMOR().getVal();
} catch (RemoteException e) {
e.printStackTrace();
}
return moid;
}
}

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

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

VMware实现控制台功能(VMware Remote Console)的更多相关文章

  1. 通过IMM With Remote Console为服务器安装操作系统

    现有IBM System x3750 M4(8722A1C)配置   产品类别 机架式 产品结构 2U CPU类型 Intel 至强E5-4600 CPU型号 Xeon E5-4640 CPU频率 2 ...

  2. VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记

    VMware Workstation软件需要依赖于宿主操作系统之上. VMware vSphere是VMware公司推出一套服务器虚拟化解决方案,它是可以直接独立安装和运行在祼机上的系统. VMwar ...

  3. VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计

    目录 目录 前文列表 备份思路 备份算法 备份细节 连接到 vCenter 还是 ESXi 如何选择快照类型 是否开启 CBT 如何获取备份数据 如何提高备份数据的传输率 备份厚置备磁盘和精简置备磁盘 ...

  4. VMware 虚拟化编程(10) — VMware 数据块修改跟踪技术 CBT

    目录 目录 前文列表 数据块修改跟踪技术 CBT 为虚拟机开启 CBT CBT 修改数据块偏移量获取函数 QueryChangedDiskAreas changeId 一个 QueryChangedD ...

  5. VMware 虚拟化编程(9) — VMware 虚拟机的快照

    目录 目录 前文列表 VMware 虚拟机的快照 快照的执行过程 删除快照 快照类型 Quiseced Snapshot 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDis ...

  6. 如何让VMware低版本运行VMware高版本创建的虚拟机

    如何让VMware低版本运行VMware高版本创建的虚拟机 问题描述: 本机安装的VMware Workstation是10版本,之前VMware Workstation 11版本创建的虚拟机,在运行 ...

  7. Hadoop生态圈-Ambari控制台功能简介

    Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...

  8. 关于卸载vmware后如何删除VMware Network Adapter VMnet1虚拟网卡

    默认情况下.我们在windows下安装了vmware虚拟机后,都会产生VMware Network Adapter VMnet1虚拟网卡 对于vmware虚拟网卡的管理,我们可以在vmware虚拟机软 ...

  9. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计

    目录 目录 前文列表 将已存在的虚拟机恢复到指定时间点 恢复为新建虚拟机 灾难恢复 恢复细节 恢复增量备份数据 以 RDM 的方式创建虚拟磁盘 创建虚拟机 Sample of VirtualMachi ...

随机推荐

  1. DIAView组态软件笔记

    1.为了节省成本,我们往往会在PLC将多个开关量整合到同一个word中,这样关联的变量可以从原有的16个变成现在的一个.这样做带来的麻烦就是需要我们在脚本中自己来解析出数据,通过对2求余(mod 2) ...

  2. Servlet过滤器Filter和监听器

    一.Servlet过滤器的概念: *********************************************************************************** ...

  3. sudo命令: 在其他用户下操作root用户权限

    一. 场景: 在某个远程服务器 A 上,用 账户1 登陆, 想要在root用户的目录下创建一个 .sh文件,  如果直接 用 touch test.sh 创建,会提示权限不足 此时可以用sudo命令: ...

  4. NodeJ node.js Koa2 跨域请求

    Koa2 .3 跨域请求 Haisen's  需求分析 (localhost:8080 = 前端  [请求]  localhost:8081 = 服务器 ) 1.一个前台    一个服务器    前台 ...

  5. js实现点击按钮可实现编辑

    <script type="text/javascript">//修改密码//抓取到的数据 function edit() { document.getElementB ...

  6. 哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现

    #include<iostream>#include<iomanip>using namespace std; typedef struct Node{ int data; s ...

  7. Linux 只显示目录或者文件方法

    ls 参数 -a 表示显示所有文件,包含隐藏文件-d 表示显示目录自身的属性,而不是目录中的内容-F 选项会在显示目录条目时,在目录后加一个/ 只显示目录 方法一: find . -type d -m ...

  8. 【每天一条Linux指令-Day1】kill掉多个mysql的进程

    我被问到过一个shell的问题,问的是如何kill掉多个mysql的进程? 怎么把这个的pid传递下去 ps -ef|grep mysql | xargs kill -9 ps -ef|grep my ...

  9. 使用maven下载cdh版本的大数据jar包

    在pom文件中添加 cloudera 配置文件 <repositories> <repository> <id>cloudera</id> <ur ...

  10. (杭电 1702)ACboy needs your help again!

    ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...