示例#1
0
def export(server, vm_obj):
    # Request an export
    request = VI.ExportVmRequestMsg()
    _this = request.new__this(vm_obj._mor)
    _this.set_attribute_type(vm_obj._mor.get_attribute_type())
    request.set_element__this(_this)
    ret = server._proxy.ExportVm(request)

    # List of urls to download
    mor = ret._returnval
    http = VIProperty(connection, ret._returnval)
    url = http.info.deviceUrl[0].url

    # TODO: actually download them.

    # Set to 100%
    request = VI.HttpNfcLeaseProgressRequestMsg()
    _this = request.new__this(mor)
    _this.set_attribute_type(MORTypes.HttpNfcLease)
    request.set_element__this(_this)
    request.set_element_percent(100)
    server._proxy.HttpNfcLeaseProgress(request)

    # Completes the request
    request = VI.HttpNfcLeaseCompleteRequestMsg()
    _this = request.new__this(mor)
    _this.set_attribute_type(MORTypes.HttpNfcLease)
    request.set_element__this(_this)
    server._proxy.HttpNfcLeaseComplete(request)
示例#2
0
def lease(http_nfc_lease, ovf_file_path, server):
    u"""Uploading request files.

    @param http_nfc_lease Lease
    @param server         Insrance of VIServer
    """
    # Import
    import time
    import threading
    from pysphere import VIProperty
    from pysphere.resources import VimService_services as VI

    go_on = True
    lease = VIProperty(server, http_nfc_lease)
    while lease.state == 'initializing':
        print lease.state
        lease._flush_cache()
    if lease.state != 'ready':
        print "something went wrong"
        exit()

    def keep_lease_alive(lease):
        u"""プロセスを継続させる

        @param leaese 仮のVM
        """
        request = VI.HttpNfcLeaseProgressRequestMsg()
        _this = request.new__this(lease)
        _this.set_attribute_type(lease.get_attribute_type())
        request.set_element__this(_this)
        request.set_element_percent(50)
        while go_on:
            server._proxy.HttpNfcLeaseProgress(request)

    time.sleep(5)
    t = threading.Thread(target=keep_lease_alive, args=(http_nfc_lease,))
    t.start()

    # Upload
    print 'Uploading...'
    upload_format_file(lease, '.vmdk', ovf_file_path, server)

    go_on = False
    t.join()

    request = VI.HttpNfcLeaseCompleteRequestMsg()
    _this = request.new__this(http_nfc_lease)
    _this.set_attribute_type(http_nfc_lease.get_attribute_type())
    request.set_element__this(_this)
    server._proxy.HttpNfcLeaseComplete(request)
        t.start()
        for dev_url in lease.info.deviceUrl:
            filename = dev_url.targetId
            hostname = urlparse(s._proxy.binding.url).hostname
            upload_url = dev_url.ulr.replace("*", hostname)
            filename = os.path.join(os.path.dirname(OVF_FILE), filename)
            fsize = os.stat(filename).st_size
            f = open(filename, 'rb')
            mmapped_file = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
            request = urllib2.Request(upload_url, upload_url=mmapped_file)

            request.add_header("Content-Type",
                               "application/x-vnd.vmware-streamVmdk")
            request.add_header("Connection", "Keep-Alive")
            request.add_header("Content-Length", str(fsize))
            opener = urllib2.build_opener(urllib2.HTTPHandler)
            resp = opener.open(request)
            mmapped_file.close()
            f.close()

        go_on = False
        t.join()
        request = VI.HttpNfcLeaseCompleteRequestMsg()
        _this = request.new__this(http_nfc_lease)
        _this.set_attribute_type(http_nfc_lease.get_attribute_type())
        request.set_element__this(_this)
        s._proxy.HttpNfcLeaseComplete(request)

    finally:
        s.disconnect()