X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=vimconn_vmware.py;h=069c0bc8db8b3dd7f3a233e7404477cf301bae9c;hb=1f3a67138592443a8bd68ab936e071cb5bccda55;hp=ff457ce75e0274a9010c74d73a5c8f69fc70d56f;hpb=b6ffe795090a19b8a5155f63010b3ee725896d0a;p=osm%2FRO.git diff --git a/vimconn_vmware.py b/vimconn_vmware.py index ff457ce7..069c0bc8 100644 --- a/vimconn_vmware.py +++ b/vimconn_vmware.py @@ -103,7 +103,7 @@ flavorlist = {} class vimconnector(vimconn.vimconnector): def __init__(self, uuid=None, name=None, tenant_id=None, tenant_name=None, - url=None, url_admin=None, user=None, passwd=None, log_level="ERROR", config={}): + url=None, url_admin=None, user=None, passwd=None, log_level=None, config={}): """ Constructor create vmware connector to vCloud director. @@ -151,7 +151,8 @@ class vimconnector(vimconn.vimconnector): self.admin_user = None self.logger = logging.getLogger('openmano.vim.vmware') - self.logger.setLevel(10) + if log_level: + self.logger.setLevel( getattr(logging, log_level) ) try: self.admin_user = config['admin_username'] @@ -159,7 +160,6 @@ class vimconnector(vimconn.vimconnector): except KeyError: raise vimconn.vimconnException(message="Error admin username or admin password is empty.") - self.logger = logging.getLogger('mano.vim.vmware') self.org_uuid = None self.vca = None @@ -364,7 +364,7 @@ class vimconnector(vimconn.vimconnector): else: raise vimconn.vimconnException("Failed create tenant {}".format(tenant_name)) - def delete_tenant(self, tenant_id, ): + def delete_tenant(self, tenant_id=None): """Delete a tenant from VIM""" 'Returns the tenant identifier' raise vimconn.vimconnNotImplemented("Should have implemented this") @@ -767,8 +767,7 @@ class vimconnector(vimconn.vimconnector): media = mediaType.parseString(response.content, True) link = \ filter(lambda link: link.get_rel() == 'upload:default', - media.get_Files().get_File()[0].get_Link())[ - 0] + media.get_Files().get_File()[0].get_Link())[0] headers = vca.vcloud_session.get_vcloud_headers() headers['Content-Type'] = 'Content-Type text/xml' response = Http.put(link.get_href(), data=open(media_file_name, 'rb'), headers=headers, @@ -791,49 +790,47 @@ class vimconnector(vimconn.vimconnector): logger=self.logger) if response.status_code == requests.codes.ok: media = mediaType.parseString(response.content, True) - link = \ - filter(lambda link: link.get_rel() == 'upload:default', - media.get_Files().get_File()[0].get_Link())[ - 0] - - # The OVF file and VMDK must be in a same directory - head, tail = os.path.split(media_file_name) - filevmdk = head + '/' + os.path.basename(link.get_href()) - - os.path.isfile(filevmdk) - statinfo = os.stat(filevmdk) - - # TODO debug output remove it - # print media.get_Files().get_File()[0].get_Link()[0].get_href() - # print media.get_Files().get_File()[1].get_Link()[0].get_href() - # print link.get_href() - - # in case first element is pointer to OVF. - hrefvmdk = link.get_href().replace("descriptor.ovf", "Cirros-disk1.vmdk") - - f = open(filevmdk, 'rb') - bytes_transferred = 0 - while bytes_transferred < statinfo.st_size: - my_bytes = f.read(chunk_bytes) - if len(my_bytes) <= chunk_bytes: - headers = vca.vcloud_session.get_vcloud_headers() - headers['Content-Range'] = 'bytes %s-%s/%s' % ( - bytes_transferred, len(my_bytes) - 1, statinfo.st_size) - headers['Content-Length'] = str(len(my_bytes)) - response = Http.put(hrefvmdk, - headers=headers, - data=my_bytes, - verify=vca.verify, - logger=None) - if response.status_code == requests.codes.ok: - bytes_transferred += len(my_bytes) - self.logger.debug('transferred %s of %s bytes' % (str(bytes_transferred), - str(statinfo.st_size))) - else: - self.logger.debug('file upload failed with error: [%s] %s' % (response.status_code, - response.content)) - return False - f.close() + links_list = filter(lambda link: link.get_rel() == 'upload:default', + media.get_Files().get_File()[0].get_Link()) + + for link in links_list: + # The OVF file and VMDK must be in a same directory + head, tail = os.path.split(media_file_name) + media_file_name = link.get_href() + if 'ovf' in media_file_name: + print "skiping {}".format(media_file_name) + continue + file_vmdk = head + '/' + os.path.basename(link.get_href()) + os.path.isfile(file_vmdk) + statinfo = os.stat(file_vmdk) + + # in case first element is pointer to OVF. + hrefvmdk = link.get_href().replace("descriptor.ovf", media_file_name) + print("Uploading file {}".format(hrefvmdk)) + + f = open(file_vmdk, 'rb') + bytes_transferred = 0 + while bytes_transferred < statinfo.st_size: + my_bytes = f.read(chunk_bytes) + if len(my_bytes) <= chunk_bytes: + headers = vca.vcloud_session.get_vcloud_headers() + headers['Content-Range'] = 'bytes %s-%s/%s' % ( + bytes_transferred, len(my_bytes) - 1, statinfo.st_size) + headers['Content-Length'] = str(len(my_bytes)) + response = Http.put(hrefvmdk, + headers=headers, + data=my_bytes, + verify=vca.verify, + logger=None) + if response.status_code == requests.codes.ok: + bytes_transferred += len(my_bytes) + self.logger.debug('transferred %s of %s bytes' % (str(bytes_transferred), + str(statinfo.st_size))) + else: + self.logger.debug('file upload failed with error: [%s] %s' % (response.status_code, + response.content)) + return False + f.close() return True else: self.logger.debug("Failed retrieve vApp template for catalog name {} for OVF {}".