Example #1
0
 def get_media(self, catalog_name, media_name):
     refs = filter(
         lambda ref: ref.name == catalog_name and ref.type_ ==
         'application/vnd.vmware.vcloud.catalog+xml',
         self.vcloud_session.organization.Link)
     if len(refs) == 1:
         self.response = requests.get(
             refs[0].get_href(),
             headers=self.vcloud_session.get_vcloud_headers(),
             verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             catalog = catalogType.parseString(self.response.content, True)
             catalog_items = filter(
                 lambda catalogItemRef: catalogItemRef.get_name() ==
                 media_name,
                 catalog.get_CatalogItems().get_CatalogItem())
             if len(catalog_items) == 1:
                 self.response = requests.get(
                     catalog_items[0].get_href(),
                     headers=self.vcloud_session.get_vcloud_headers(),
                     verify=self.verify)
                 # print self.response.content
                 if self.response.status_code == requests.codes.ok:
                     doc = self.parsexml_(self.response.content)
                     for element in doc._children:
                         if element.tag == '{http://www.vmware.com/vcloud/v1.5}Entity':
                             return element.attrib
Example #2
0
 def get_media(self, catalog_name, media_name):
     refs = filter(lambda ref: ref.name == catalog_name and ref.type_ == 'application/vnd.vmware.vcloud.catalog+xml', self.vcloud_session.organization.Link)
     if len(refs) == 1:
         response = self._invoke_api(requests, 'get',
                                     refs[0].get_href(), 
                                     headers=self.vcloud_session.get_vcloud_headers(),
                                     verify=self.verify)
         if response.status_code == requests.codes.ok:
             catalog = catalogType.parseString(response.content, True)
             catalog_items = filter(lambda catalogItemRef: catalogItemRef.get_name() == media_name, catalog.get_CatalogItems().get_CatalogItem())
             if len(catalog_items) == 1:
                 response = self._invoke_api(requests, 'get',
                                             catalog_items[0].get_href(),
                                             headers=self.vcloud_session.get_vcloud_headers(),
                                             verify=self.verify)
                 if response.status_code == requests.codes.ok:
                     doc = self.parsexml_(response.content)
                     for element in doc._children:
                         if element.tag == '{http://www.vmware.com/vcloud/v1.5}Entity':
                             return element.attrib
                 elif response.status_code == requests.codes.forbidden:
                     excep_msg = "Get_media forbidden,get media_ref error, media_name:%s" % (media_name)
                     raise exceptions.ForbiddenException(excep_msg)
                 else:
                     excep_msg = "Get_media failed, get media_ref error, response:%s" % (response)
                     raise exceptions.VCloudDriverException(excep_msg)
             else:
                 excep_msg = "Get_media error, catalog_items size is not one, media_name:%s" % (media_name) 
                 raise exceptions.VCloudDriverException(excep_msg)
         elif response.status_code == requests.codes.forbidden:
             excep_msg = "Get_media forbidden, media_name:%s" % (media_name)
             raise exceptions.ForbiddenException(excep_msg)
         else:
             excep_msg = "Get_media failed, response:%s" % (response)
             raise exceptions.VCloudDriverException(excep_msg)
Example #3
0
 def get_catalogs(self):
     links = filter(lambda link: link.get_type() == "application/vnd.vmware.vcloud.catalog+xml", self.vcloud_session.organization.Link)
     catalogs = []
     for link in links:
         self.response = requests.get(link.get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             catalogs.append(catalogType.parseString(self.response.content, True))
     return catalogs
Example #4
0
 def get_catalogs(self):
     links = filter(lambda link: link.get_type() == "application/vnd.vmware.vcloud.catalog+xml", self.vcloud_session.organization.Link)
     catalogs = []
     for link in links:
         self.response = requests.get(link.get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             catalogs.append(catalogType.parseString(self.response.content, True))
     return catalogs
Example #5
0
    def create_vapp(self, vdc_name, vapp_name, template_name, catalog_name,
                    network_name=None, network_mode='bridged', vm_name=None,
                    vm_cpus=None, vm_memory=None, deploy='false',
                    poweron='false'):
        self.vdc = self.get_vdc(vdc_name)
        if not self.vcloud_session or not self.vcloud_session.organization or not self.vdc:
            #"Select an organization and datacenter first"
            print "here"
            return False
        if '' == vm_name: vm_name = None
        catalogs = filter(lambda link: catalog_name == link.get_name() and link.get_type() == "application/vnd.vmware.vcloud.catalog+xml",
                                 self.vcloud_session.organization.get_Link())
        if len(catalogs) == 1:
            self.response = requests.get(catalogs[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
            if self.response.status_code == requests.codes.ok:
                catalog = catalogType.parseString(self.response.content, True)
                catalog_items = filter(lambda catalogItemRef: catalogItemRef.get_name() == template_name, catalog.get_CatalogItems().get_CatalogItem())
                if len(catalog_items) == 1:
                    self.response = requests.get(catalog_items[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
                    # use ElementTree instead because none of the types inside resources (not even catalogItemType) is able to parse the response correctly
                    catalogItem = ET.fromstring(self.response.content)
                    entity = [child for child in catalogItem if child.get("type") == "application/vnd.vmware.vcloud.vAppTemplate+xml"][0]
                    vm_href = None
                    if vm_name:
                        self.response = requests.get(entity.get('href'), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
                        if self.response.status_code == requests.codes.ok:
                            vAppTemplate = ET.fromstring(self.response.content)
                            for vm in vAppTemplate.iter('{http://www.vmware.com/vcloud/v1.5}Vm'):
                                vm_href = vm.get('href')
                    template_params = self._create_instantiateVAppTemplateParams(
                        vapp_name, entity.get("href"), vm_name=vm_name,
                        vm_href=vm_href, vm_cpus=vm_cpus, vm_memory=vm_memory,
                        deploy=deploy, power=poweron)

                    if network_name:
                        pass
                    output = StringIO()
                    template_params.export(output,
                        0,
                        name_ = 'InstantiateVAppTemplateParams',
                        namespacedef_ = '''xmlns="http://www.vmware.com/vcloud/v1.5" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
                                           xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"''',
                                           pretty_print = False)
                    body = '<?xml version="1.0" encoding="UTF-8"?>' + \
                            output.getvalue().replace('class:', 'rasd:')\
                                             .replace(' xmlns:vmw="http://www.vmware.com/vcloud/v1.5"', '')\
                                             .replace('vmw:', 'rasd:')\
                                             .replace('Info>', "ovf:Info>")
                    content_type = "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml"
                    link = filter(lambda link: link.get_type() == content_type, self.vdc.get_Link())
                    self.response = requests.post(link[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify, data=body)
                    print self.response.content
                    if self.response.status_code == requests.codes.created:
                        vApp = vAppType.parseString(self.response.content, True)
                        task = vApp.get_Tasks().get_Task()[0]
                        return task
        return False
Example #6
0
    def create_vapp(self, vdc_name, vapp_name, template_name, catalog_name,
                    network_name=None, network_mode='bridged', vm_name=None,
                    vm_cpus=None, vm_memory=None, deploy='false',
                    poweron='false'):
        self.vdc = self.get_vdc(vdc_name)
        if not self.vcloud_session or not self.vcloud_session.organization or not self.vdc:
            #"Select an organization and datacenter first"
            return False
        if '' == vm_name: vm_name = None
        catalogs = filter(lambda link: catalog_name == link.get_name() and link.get_type() == "application/vnd.vmware.vcloud.catalog+xml",
                                 self.vcloud_session.organization.get_Link())
        if len(catalogs) == 1:
            self.response = requests.get(catalogs[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
            if self.response.status_code == requests.codes.ok:
                catalog = catalogType.parseString(self.response.content, True)
                catalog_items = filter(lambda catalogItemRef: catalogItemRef.get_name() == template_name, catalog.get_CatalogItems().get_CatalogItem())
                if len(catalog_items) == 1:
                    self.response = requests.get(catalog_items[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
                    # use ElementTree instead because none of the types inside resources (not even catalogItemType) is able to parse the response correctly
                    catalogItem = ET.fromstring(self.response.content)
                    entity = [child for child in catalogItem if child.get("type") == "application/vnd.vmware.vcloud.vAppTemplate+xml"][0]
                    vm_href = None
                    if vm_name:
                        self.response = requests.get(entity.get('href'), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
                        if self.response.status_code == requests.codes.ok:
                            vAppTemplate = ET.fromstring(self.response.content)
                            for vm in vAppTemplate.iter('{http://www.vmware.com/vcloud/v1.5}Vm'):
                                vm_href = vm.get('href')
                    template_params = self._create_instantiateVAppTemplateParams(
                        vapp_name, entity.get("href"), vm_name=vm_name,
                        vm_href=vm_href, vm_cpus=vm_cpus, vm_memory=vm_memory,
                        deploy=deploy, power=poweron)

                    if network_name:
                        pass
                    output = StringIO()
                    template_params.export(output,
                        0,
                        name_ = 'InstantiateVAppTemplateParams',
                        namespacedef_ = '''xmlns="http://www.vmware.com/vcloud/v1.5" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1"
                                           xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"''',
                                           pretty_print = False)
                    body = '<?xml version="1.0" encoding="UTF-8"?>' + \
                            output.getvalue().replace('class:', 'rasd:')\
                                             .replace(' xmlns:vmw="http://www.vmware.com/vcloud/v1.5"', '')\
                                             .replace('vmw:', 'rasd:')\
                                             .replace('Info>', "ovf:Info>")
                    content_type = "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml"
                    link = filter(lambda link: link.get_type() == content_type, self.vdc.get_Link())
                    self.response = requests.post(link[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify, data=body)
                    if self.response.status_code == requests.codes.created:
                        vApp = vAppType.parseString(self.response.content, True)
                        task = vApp.get_Tasks().get_Task()[0]
                        return task
        return False
Example #7
0
 def get_media(self, catalog_name, media_name):
     refs = filter(lambda ref: ref.name == catalog_name and ref.type_ == 'application/vnd.vmware.vcloud.catalog+xml', self.vcloud_session.organization.Link)
     if len(refs) == 1:
         self.response = requests.get(refs[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             catalog = catalogType.parseString(self.response.content, True)
             catalog_items = filter(lambda catalogItemRef: catalogItemRef.get_name() == media_name, catalog.get_CatalogItems().get_CatalogItem())
             if len(catalog_items) == 1:
                 self.response = requests.get(catalog_items[0].get_href(), headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
                 # print self.response.content
                 if self.response.status_code == requests.codes.ok:
                     doc = self.parsexml_(self.response.content)
                     for element in doc._children:
                         if element.tag == '{http://www.vmware.com/vcloud/v1.5}Entity':
                             return element.attrib
Example #8
0
    def test_get_image_list(self, get_catalogs, connect):
        catalog1 = xml_resp.catalog1_xml_response
        catalog2 = xml_resp.catalog2_xml_response

        catalogs = [
            catalogType.parseString(cat, True) for cat in catalog1, catalog2
        ]
        connect.return_value = self.vca
        self.vim.vca = self.vim.connect()
        # assumed return value from VIM connector
        self.vim.vca.get_catalogs.return_value = catalogs
        result = self.vim.get_image_list(
            {'id': '32ccb082-4a65-41f6-bcd6-38942e8a3829'})
        # assert verified expected and return result from VIM connector
        for item in result:
            self.assertEqual(item['id'],
                             '32ccb082-4a65-41f6-bcd6-38942e8a3829')