vcenter 6.x 生成预验证的 html5 vm console链接

来源:互联网 发布:软件开发简介 编辑:程序博客网 时间:2024/06/05 23:44

    因工作需要,需要生成一个console链接来给客户使用。当时主要使用的是pyvmomi来实现的。


    pyvmomi提供了一些简单的例子,可以在 https://github.com/vmware/pyvmomi-community-samples 下载

 刚好里面有一个generate_html5_console.py 是专门用来生成vm console链接的,可以直接运行。

    运行后可以获得一个链接,本来以为成功了,结果发现并不能使用(返回的网页说验证不成功)。然后,百度,google了一下。发现这个例子在vcenter 5.x能使用,6.x版本不能使用。 

    经过研究后发现,目前不能通过生成vcenter的url直接获得console(这种方法必须登陆vcenter)。但可以通过预验证的url直接连上虚拟机所在的物理机上的esxi来获得console.

    第一步生成预验证的url

    可通过修改 generate_html5_console.py  来达成目的,下面是修改后的代码

import atexitimport OpenSSLimport sslimport sysimport timefrom pyVim.connect import SmartConnectNoSSL, Disconnectfrom pyVmomi import vimfrom tools import clidef get_vm(content, name):    try:        name = unicode(name, 'utf-8')    except TypeError:        pass    vm = None    container = content.viewManager.CreateContainerView(        content.rootFolder, [vim.VirtualMachine], True)    for c in container.view:        if c.name == name:            vm = c            break    return vmdef get_args():    """    Add VM name to args    """    parser = cli.build_arg_parser()    parser.add_argument('-n', '--name',                        required=True,                        help='Name of Virtual Machine.')    args = parser.parse_args()    return cli.prompt_for_password(args)def get_url(host,user,password,name,port=443):    """    Simple command-line program to generate a URL    to open HTML5 Console in Web browser    """    try:        si = SmartConnectNoSSL(host=host,                          user=user,                          pwd=password,                          port=int(port))    except Exception as e:        print 'Could not connect to vCenter host'        print repr(e)        sys.exit(1)    atexit.register(Disconnect, si)    content = si.RetrieveContent()    vm = get_vm(content, name)    x = vm.AcquireTicket("webmks")    url = "wss://" + str(x.host) +":" + str(x.port)   + "/ticket/" + str(x.ticket)    return url
       


      第二步将上一步获得的url填入(替换掉红色部分):

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>    <title>Console</title></head><body><link rel="stylesheet" type="text/css" href="css/wmks-all.css"/><script type="text/javascript" src="jquery.min.js"></script><script type="text/javascript" src="jquery-ui.min.js"></script><script type="text/javascript" src="wmks.min.js" type="text/javascript"></script><div id="wmksContainer" style="position:absolute;width:100%;height:100%"></div><script> var wmks = WMKS.createWMKS("wmksContainer", {}).register(WMKS.CONST.Events.CONNECTION_STATE_CHANGE, function (event, data) {    if (data.state == WMKS.CONST.ConnectionState.CONNECTED) {        console.log("connection state change : connected");    }});wmks.connect("wss://192.168.3.1:443/ticket/d8e1a3359b2323fd86");</body></html>

     

     打开该html文件即可。

     上面的方法来自 html-console-sdk-210-programmer-guide.pdf,

     相关文件可以去下面下载

     链接: https://pan.baidu.com/s/1bpLdbcz 密码: n7nj

     运行generate_html5_console.py来生成url

     将生成的url替换console文件夹中的console.html中的url。

     浏览器打开console.html即可

     注意:很有可能打开之后无法链接到wss://192.168.3.1:443/ticket/fdlksalfjf fjdskf,原因是该网站的证书不被浏览器支持。可以先在浏览器打开https://192.168.3.1并信任ssl证书即可。


     即使做到这一步也有很大的问题,如安装exsi的机器肯定在内网里,所以,我们无法在外网访问这台机器。下一章介绍如何通过 nginx做代理服务器来达到我们的目的。

     参考文章:http://vittoriop77.blogspot.it/2016/03/vsphere-6-html-console.html




原创粉丝点击