示例#1
0
 def get_all_vapps(self, vdc):
     refs = filter(lambda ref: ref.type_ == 'application/vnd.vmware.vcloud.vApp+xml', vdc.ResourceEntities.ResourceEntity)
     for ref in refs:
         self.response = requests.get(ref.href, headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             vapp = VAPP(vAppType.parseString(self.response.content, True), self.vcloud_session.get_vcloud_headers(), self.verify)
             yield vapp
示例#2
0
 def get_vapp(self, vdc, vapp_name):
     refs = filter(lambda ref: ref.name == vapp_name and ref.type_ == 'application/vnd.vmware.vcloud.vApp+xml', vdc.ResourceEntities.ResourceEntity)
     if len(refs) == 1:
         self.response = requests.get(refs[0].href, headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             vapp = VAPP(vAppType.parseString(self.response.content, True), self.vcloud_session.get_vcloud_headers(), self.verify)
             return vapp
示例#3
0
 def get_vapp(self, vdc, vapp_name):
     refs = filter(lambda ref: ref.name == vapp_name and ref.type_ == 'application/vnd.vmware.vcloud.vApp+xml', vdc.ResourceEntities.ResourceEntity)
     if len(refs) == 1:
         self.response = requests.get(refs[0].href, headers=self.vcloud_session.get_vcloud_headers(), verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             vapp = VAPP(vAppType.parseString(self.response.content, True), self.vcloud_session.get_vcloud_headers(), self.verify)
             return vapp
示例#4
0
    def test_refresh_vms_status(self, get_vdc_details, get_namebyvappid,
                                connect, get_vapp, get_vm_pci_details,
                                get_network_id_by_name):
        headers = {
            'Accept': 'application/*+xml;version=5.9',
            'x-vcloud-authorization': '638bfee6cb5f435abc3480f480817254'
        }
        vm_id = '05e6047b-6938-4275-8940-22d1ea7245b8'

        vapp_resp = xml_resp.vapp_xml_response
        # created vdc object
        vdc_xml_resp = xml_resp.vdc_xml_response
        vdc = vdcType.parseString(vdc_xml_resp, True)
        # assumed return value from VIM connector
        get_vdc_details.return_value = vdc
        connect.return_value = self.vca

        self.vim.vca = self.vim.connect()
        get_namebyvappid.return_value = 'Test1_vm-69a18104-8413-4cb8-bad7-b5afaec6f9fa'
        get_vm_pci_details.return_value = {
            'host_name': 'test-esx-1.corp.local',
            'host_ip': '12.19.24.31'
        }
        get_vapp.return_value = VAPP(vAppType.parseString(vapp_resp, True),
                                     headers, False)
        get_network_id_by_name.return_value = '47d12505-5968-4e16-95a7-18743edb0c8b'
        # call to VIM connector method
        result = self.vim.refresh_vms_status([vm_id])
        for attr in result[vm_id]:
            if attr == 'status':
                # assert verified expected and return result from VIM connector
                self.assertEqual(result[vm_id][attr], 'ACTIVE')
示例#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
示例#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
示例#7
0
    def get_ovf_descriptor(self):
        link = filter(lambda link: link.get_rel() == 'download:default', self.me.get_Link())
        if not link:
            print "Can Not get download url"
            return

        headers = self.headers
        url = link[0].get_href()
        self.response = requests.get(url, headers=headers, verify=self.verify)
        if self.response.status_code == requests.codes.ok:
             return vAppType.parseString(self.response.content, True)
        else:
            return False
示例#8
0
 def get_all_vapps(self, vdc):
     refs = filter(
         lambda ref: ref.type_ == 'application/vnd.vmware.vcloud.vApp+xml',
         vdc.ResourceEntities.ResourceEntity)
     for ref in refs:
         self.response = requests.get(
             ref.href,
             headers=self.vcloud_session.get_vcloud_headers(),
             verify=self.verify)
         if self.response.status_code == requests.codes.ok:
             vapp = VAPP(vAppType.parseString(self.response.content, True),
                         self.vcloud_session.get_vcloud_headers(),
                         self.verify)
             yield vapp
示例#9
0
    def get_ovf_descriptor(self):
        link = filter(lambda link: link.get_rel() == 'download:default',
                      self.me.get_Link())
        if not link:
            print "Can Not get download url"
            return

        headers = self.headers
        url = link[0].get_href()
        self.response = requests.get(url, headers=headers, verify=self.verify)
        if self.response.status_code == requests.codes.ok:
            return vAppType.parseString(self.response.content, True)
        else:
            return False
    def get_ovf_descriptor(self):
        link = filter(lambda link: link.get_rel() == "download:default", self.me.get_Link())
        if not link:
            print "Can Not get download url"
            return

        headers = self.headers
        url = link[0].get_href()
        self.response = requests.get(url, headers=headers, verify=self.verify)
        if self.response.status_code == requests.codes.ok:
            return vAppType.parseString(self.response.content, True)
        elif self.response.status_code == requests.codes.forbidden:
            LOG.error("get_ovf_descriptor failed: forbidden. vapp %s " % self.name)
            raise exceptions.ForbiddenException("get_ovf_descriptor failed: forbidden. vapp %s" % self.name)
        else:
            return False
    def get_ovf_descriptor(self):
        link = filter(
            lambda link: link.get_rel() == 'download:default',
            self.me.get_Link())
        if not link:
            print "Can Not get download url"
            return

        headers = self.headers
        url = link[0].get_href()
        self.response = requests.get(url, headers=headers, verify=self.verify)
        if self.response.status_code == requests.codes.ok:
            return vAppType.parseString(self.response.content, True)
        elif self.response.status_code == requests.codes.forbidden:
            LOG.error("get_ovf_descriptor failed: forbidden. vapp %s " % self.name)
            raise exceptions.ForbiddenException("get_ovf_descriptor failed: forbidden. vapp %s" % self.name)
        else:
            return False
示例#12
0
 def create_vapp(self, vdc_name, vapp_name, template_name, catalog_name=None, network_configs=[], deploy=False,
                 poweron=False, root_gb=None):
     vdc = self.get_vdc(vdc_name)
     vapp_template_entity = self.get_vapp_template(vdc, template_name)
     if len(vapp_template_entity) < 1:
         raise exceptions.ForbiddenException("Create_vapp error, cannot find the template %s" % template_name)
     template_params = self._generate_instantiate_vapp_params(vapp_name, vapp_template_entity[0].href,
                                                                    deploy=deploy, poweron=poweron,
                                                                    network_configs=network_configs,
                                                                    root_gb=root_gb)
     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"''',
                                            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('ovf:NetworkConfigSection', 'NetworkConfigSection')\
                              .replace('Info>', "ovf:Info>")\
                              .replace('<NetworkConfigSection>', '<NetworkConfigSection><ovf:Info>networks</ovf:Info>')
     content_type = "application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml"
     link = filter(lambda link: link.get_type() == content_type, vdc.get_Link())
     headers = self.vcloud_session.get_vcloud_headers()
     response = self._invoke_api(requests, 'post',
                                         link[0].href,
                                         headers=headers,
                                         data=body,
                                         verify=self.verify)
     if response.status_code == requests.codes.forbidden:
         raise exceptions.ForbiddenException("Create_vapp error, vapp_name:%s" % vapp_name)
     if response.status_code == requests.codes.created:
         vapp = vAppType.parseString(response.content, True)
         task = vapp.get_Tasks().get_Task()[0]
         return (True, task)
     else:
         return (False, response.content)