def test_TearDown(self): dcapi = DataCenterAPIs() capi = ClusterAPIs() time.sleep(30) # Step1:将data1存储域设置为Maintenance状态 LogPrint().info("Post-Module-Test-1: Deactivate data storage domains '%s'." % self.dm.data1_nfs_name) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) # Step2:删除数据中心dc1(非强制,之后存储域变为Unattached状态) if dcapi.searchDataCenterByName(self.dm.dc_nfs_name)['result']['data_centers']: LogPrint().info("Post-Module-Test-2: Delete DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue(dcapi.delDataCenter(self.dm.dc_nfs_name)['status_code']==self.dm.expected_status_code_del_dc) # Step3:删除4个Unattached状态存储域(data1/data2/iso1/export1) LogPrint().info("Post-Module-Test-3: Delete all unattached storage domains.") dict_sd_to_host = [self.dm.data1_nfs_name, self.dm.data2_nfs_name] for sd in dict_sd_to_host: smart_del_storage_domain(sd, self.dm.xml_del_sd_option, host_name=self.dm.host1_name) # Step4:删除主机(host1) LogPrint().info("Post-Module-Test-6: Delete host '%s'." % self.dm.host1_name) self.assertTrue(smart_del_host(self.dm.host1_name, self.dm.xml_del_host_option)) # Step5:删除集群cluster1 if capi.searchClusterByName(self.dm.cluster_nfs_name)['result']['clusters']: LogPrint().info("Post-Module-Test-5: Delete Cluster '%s'." % self.dm.cluster_nfs_name) self.assertTrue(capi.delCluster(self.dm.cluster_nfs_name)['status_code']==self.dm.expected_status_code_del_dc)
def test_Create_DC(self): ''' @summary: 创建一个数据中心 ''' dcapi = DataCenterAPIs() LogPrint().info("Pre-Module-Test: Create DataCenter '%s'." % self.dm.dc_name) dcapi.createDataCenter(self.dm.dc_info)
def test_CreateModuleTestEnv(self): ''' @summary: 创建Disk模块测试环境 ''' dcapi = DataCenterAPIs() capi = ClusterAPIs() # 创建1个数据中心(nfs类型) LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue(dcapi.createDataCenter(self.dm.xml_dc_info)['status_code']==self.dm.expected_status_code_create_dc) # 创建1个集群 LogPrint().info("Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_nfs_name, self.dm.dc_nfs_name)) self.assertTrue(capi.createCluster(self.dm.xml_cluster_info)['status_code']==self.dm.expected_status_code_create_cluster) # 在NFS数据中心中创建一个主机,并等待主机UP。 LogPrint().info("Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (self.dm.host1_name, self.dm.cluster_nfs_name)) self.assertTrue(smart_create_host(self.dm.host1_name, self.dm.xml_host_info)) # 为NFS数据中心创建Data(data1/data2)。 @BaseTestCase.drive_data(self, self.dm.xml_storage_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse(xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % sd_name) self.assertTrue(smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的data1附加到NFS/ISCSI数据中心里(data2/Iso/Export处于游离状态)。 LogPrint().info("Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name))
def test_SetUp_ENV(self): ''' @summary: 创建一个数据中心 ''' dcapi = DataCenterAPIs() # 创建1个数据中心(共享类型) LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue(dcapi.createDataCenter(self.dm.xml_dc_info)['status_code']==self.dm.expected_status_code_create_dc) capi = ClusterAPIs() # 创建1个集群,开启集群服务 LogPrint().info("Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_nfs_name, self.dm.dc_nfs_name)) self.assertTrue(capi.createCluster(self.dm.xml_cluster_info)['status_code']==self.dm.expected_status_code_create_cluster) # 在NFS数据中心中创建两个主机,并等待主机UP。 LogPrint().info("Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (self.dm.host1_name, self.dm.cluster_nfs_name)) self.assertTrue(smart_create_host(self.dm.host1_name, self.dm.xml_host1_info)) self.assertTrue(smart_create_host(self.dm.host2_name, self.dm.xml_host2_info)) # 为数据中心创建Data域。 @BaseTestCase.drive_data(self, self.dm.xml_storage_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse(xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % sd_name) self.assertTrue(smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的data1、data2和export、iso域附加到NFS/ISCSI数据中心里。 LogPrint().info("Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.iso1_name))
def test_Create_DC(self): """ @summary: 创建一个数据中心 """ dcapi = DataCenterAPIs() LogPrint().info("Pre-Module-Test: Create DataCenter '%s'." % self.dm.dc_name) dcapi.createDataCenter(self.dm.dc_info)
def test_TearDown(self): dcapi = DataCenterAPIs() if dcapi.searchDataCenterByName( ModuleData.dc_name)['result']['data_centers']: LogPrint().info("Post-Module-Test: Delete DataCenter '%s'." % ModuleData.dc_name) dcapi.delDataCenter(ModuleData.dc_name)
def isNetworkExist(self, nw_name, dc_name): """ @summary: 检查网络是否在数据中心内存在 @param nw_name:网络名称 @param dc_name:数据中心名称 @return: True or False """ nw_api = NetworkAPIs() dc_api = DataCenterAPIs() if not nw_api.searchNetworkByName(nw_name)["result"]["networks"]: return False if not dc_api.searchDataCenterByName(dc_name)["result"]["data_centers"]: return False nw_list = nw_api.searchNetworkByName(nw_name)["result"]["networks"]["network"] if isinstance(nw_list, dict): if dc_api.getDataCenterNameById(nw_list["data_center"]["@id"]) == dc_name: return True else: return False else: self.flag = False for nw in nw_list: dc_id = nw["data_center"]["@id"] dc_name = dc_api.getDataCenterNameById(dc_id) if dc_name == dc_name: self.flag = True return self.flag
def test_CreateModuleTestEnv(self): dcapi = DataCenterAPIs() capi = ClusterAPIs() # 创建1个数据中心(nfs类型) LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue(dcapi.createDataCenter(self.dm.xml_dc_info)['status_code']==self.dm.expected_status_code_create_dc) # 创建1个集群 LogPrint().info("Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_nfs_name, self.dm.dc_nfs_name)) self.assertTrue(capi.createCluster(self.dm.xml_cluster_info)['status_code']==self.dm.expected_status_code_create_cluster) # 在NFS数据中心中创建一个主机,并等待主机UP。 LogPrint().info("Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (self.dm.host1_name, self.dm.cluster_nfs_name)) self.assertTrue(smart_create_host(self.dm.host1_name, self.dm.xml_host_info)) # 为NFS数据中心创建Data(data1/data2/export)。 @BaseTestCase.drive_data(self, self.dm.xml_storage_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse(xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % sd_name) self.assertTrue(smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的data1、data2和export域附加到NFS/ISCSI数据中心里。 LogPrint().info("Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) #self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) #创建一个虚拟机 self.vmapi = VirtualMachineAPIs() r = self.vmapi.createVm(self.dm.vm_info) if r['status_code'] == 201: self.vm_name = r['result']['vm']['name'] else: LogPrint().error("Create vm failed.Status-code is WRONG.") self.assertTrue(False) #创建一个磁盘 self.diskapi = DiskAPIs() sd_id = StorageDomainAPIs().getStorageDomainIdByName(ModuleData.data1_nfs_name) r = self.diskapi.createDisk(self.dm.disk_info, sd_id) def is_disk_ok(): return self.diskapi.getDiskStatus(self.disk_id)=='ok' if r['status_code'] == 202: self.disk_id = r['result']['disk']['@id'] if wait_until(is_disk_ok, 200, 5): LogPrint().info("Create disk ok.") else: LogPrint().error("Create disk failed.Status-code is WRONG.") self.assertTrue(False) #将磁盘附加到虚拟机 self.vmdiskapi = VmDiskAPIs() r=self.vmdiskapi.attachDiskToVm(self.vm_name, self.disk_id) if r['status_code'] == 200: LogPrint().info("Attach Disk to vm SUCCESS.") else: LogPrint().error("Attach Disk to vm fail.Status-code is WRONG.") self.assertTrue(False)
def test_SetUp_ENV(self): ''' @summary: 创建一个数据中心 ''' dcapi = DataCenterAPIs() # 创建1个数据中心(共享类型) LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue( dcapi.createDataCenter(self.dm.xml_dc_info)['status_code'] == self.dm.expected_status_code_create_dc) capi = ClusterAPIs() # 创建1个集群,开启集群服务 LogPrint().info( "Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_nfs_name, self.dm.dc_nfs_name)) self.assertTrue( capi.createCluster(self.dm.xml_cluster_info)['status_code'] == self.dm.expected_status_code_create_cluster) # 在NFS数据中心中创建两个主机,并等待主机UP。 LogPrint().info( "Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (self.dm.host1_name, self.dm.cluster_nfs_name)) self.assertTrue( smart_create_host(self.dm.host1_name, self.dm.xml_host1_info)) self.assertTrue( smart_create_host(self.dm.host2_name, self.dm.xml_host2_info)) # 为数据中心创建Data域。 @BaseTestCase.drive_data(self, self.dm.xml_storage_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse( xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % sd_name) self.assertTrue( smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的data1、data2和export、iso域附加到NFS/ISCSI数据中心里。 LogPrint().info( "Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.iso1_name))
def test_Create_DcAndCluster(self): ''' @summary: 创建3个数据中心和3个集群 ''' dcapi = DataCenterAPIs() capi = ClusterAPIs() # 创建1个共享数据中心 LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_name) self.assertTrue( dcapi.createDataCenter(self.dm.dc_info)['status_code'] == self.dm.expected_status_code_create_dc) # 创建集群 LogPrint().info( "Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_name, self.dm.dc_name)) self.assertTrue( capi.createCluster(self.dm.cluster_info)['status_code'] == self.dm.expected_status_code_create_cluster) # 在数据中心中创建两个主机,并等待主机UP。 @BaseTestCase.drive_data(self, self.dm.hosts_info_xml) def create_hosts(xml_host_info): LogPrint().info( "Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (xmltodict.parse(xml_host_info)['host']['name'], xmltodict.parse(xml_host_info)['host']['cluster']['name'])) self.assertTrue( smart_create_host( xmltodict.parse(xml_host_info)['host']['name'], xml_host_info)) create_hosts() # 为数据中心创建一个nfs类型Data域、ISO/Export域。 @BaseTestCase.drive_data(self, self.dm.xml_datas_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse( xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % (sd_name)) self.assertTrue( smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的Data域分别附加到数据中心。 LogPrint().info( "Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue( smart_attach_storage_domain(self.dm.dc_name, self.dm.data1_nfs_name)) # self.assertTrue(smart_attach_storage_domain(self.dm.dc_name, self.dm.data1_iscsi_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_name, self.dm.export1_name))
def test_TearDown(self): ''' @summary: 模块级测试资源清理 ''' dcapi = DataCenterAPIs() capi = ClusterAPIs() # Step2:将export和iso存储域设置为Maintenance状态,然后从数据中心分离 LogPrint().info("Post-Module-Test-2-1: Deactivate storage domains '%s'." % self.dm.export1_name) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) LogPrint().info("Post-Module-Test-2-2: Detach storage domains '%s'." % self.dm.export1_name) self.assertTrue(smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) LogPrint().info("Post-Module-Test-2-3: Deactivate storage domains '%s'." % self.dm.iso1_name) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.iso1_name)) LogPrint().info("Post-Module-Test-2-4: Detach storage domains '%s'." % self.dm.iso1_name) self.assertTrue(smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.iso1_name)) # Step3:将data2存储域设置为Maintenance状态,然后从数据中心分离 LogPrint().info("Post-Module-Test-3-1: Deactivate data storage domains '%s'." % self.dm.data2_nfs_name) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) LogPrint().info("Post-Module-Test-3-2: Detach data storage domains '%s'." % self.dm.data2_nfs_name) self.assertTrue(smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) # Step4:将data1存储域设置为Maintenance状态 LogPrint().info("Post-Module-Test-4: Deactivate data storage domains '%s'." % self.dm.data1_nfs_name) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) # LogPrint().info("Post-Module-Test-3-2: Detach data storage domains '%s'." % self.dm.data1_nfs_name) # self.assertTrue(smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) # Step5:删除数据中心dc1(非强制,之后存储域变为Unattached状态) if dcapi.searchDataCenterByName(self.dm.dc_nfs_name)['result']['data_centers']: LogPrint().info("Post-Module-Test-5: Delete DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue(dcapi.delDataCenter(self.dm.dc_nfs_name)['status_code']==self.dm.expected_status_code_del_dc) # Step6:删除4个Unattached状态存储域(data1/data2/export1/iso) LogPrint().info("Post-Module-Test-6: Delete all unattached storage domains.") dict_sd_to_host = [self.dm.data1_nfs_name, self.dm.data2_nfs_name, self.dm.iso1_name, self.dm.export1_name] for sd in dict_sd_to_host: smart_del_storage_domain(sd, self.dm.xml_del_sd_option, host_name=self.dm.host1_name) # Step7:删除主机(host1) LogPrint().info("Post-Module-Test-7: Delete host '%s'." % self.dm.host1_name) self.assertTrue(smart_del_host(self.dm.host1_name, self.dm.xml_del_host_option)) LogPrint().info("Post-Module-Test-7: Delete host '%s'." % self.dm.host2_name) self.assertTrue(smart_del_host(self.dm.host2_name, self.dm.xml_del_host_option)) # Step8:删除集群cluster1 if capi.searchClusterByName(self.dm.cluster_nfs_name)['result']['clusters']: LogPrint().info("Post-Module-Test-8: Delete Cluster '%s'." % self.dm.cluster_nfs_name) self.assertTrue(capi.delCluster(self.dm.cluster_nfs_name)['status_code']==self.dm.expected_status_code_del_dc)
def test_Create_DcAndCluster(self): """ @summary: 创建3个数据中心和3个集群 """ dcapi = DataCenterAPIs() capi = ClusterAPIs() # 创建1个共享数据中心 LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_name) self.assertTrue( dcapi.createDataCenter(self.dm.dc_info)["status_code"] == self.dm.expected_status_code_create_dc ) # 创建集群 LogPrint().info( "Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_name, self.dm.dc_name) ) self.assertTrue( capi.createCluster(self.dm.cluster_info)["status_code"] == self.dm.expected_status_code_create_cluster ) # 在数据中心中创建两个主机,并等待主机UP。 @BaseTestCase.drive_data(self, self.dm.hosts_info_xml) def create_hosts(xml_host_info): LogPrint().info( "Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % ( xmltodict.parse(xml_host_info)["host"]["name"], xmltodict.parse(xml_host_info)["host"]["cluster"]["name"], ) ) self.assertTrue(smart_create_host(xmltodict.parse(xml_host_info)["host"]["name"], xml_host_info)) create_hosts() # 为数据中心创建一个nfs类型Data域、ISO/Export域。 @BaseTestCase.drive_data(self, self.dm.xml_datas_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse(xml_storage_domain_info)["storage_domain"]["name"] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % (sd_name)) self.assertTrue(smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的Data域分别附加到数据中心。 LogPrint().info("Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue(smart_attach_storage_domain(self.dm.dc_name, self.dm.data1_nfs_name)) # self.assertTrue(smart_attach_storage_domain(self.dm.dc_name, self.dm.data1_iscsi_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue(smart_attach_storage_domain(self.dm.dc_name, self.dm.export1_name))
def test_TearDown(self): dcapi = DataCenterAPIs() capi = ClusterAPIs() # Step1:将ISO域和Export域设置为Maintenance状态 LogPrint().info("Post-Module-Test-1: Deactivate ISO and Export storage domains.") self.assertTrue(smart_deactive_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue(smart_deactive_storage_domain(self.dm.dc_name, self.dm.export1_name)) # Step2:将ISO域和Export域从对应的数据中心分离(detach) LogPrint().info("Post-Module-Test-2: Deattch ISO and Export storage domains.") self.assertTrue(smart_detach_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue(smart_detach_storage_domain(self.dm.dc_name, self.dm.export1_name)) # Step3:将Data存储域设置为Maintenance状态 LogPrint().info("Post-Module-Test-3: Deactivate all data storage domains.") self.assertTrue(smart_deactive_storage_domain(self.dm.dc_name, self.dm.data1_nfs_name)) # self.assertTrue(smart_deactive_storage_domain(self.dm.dc_name, self.dm.data1_iscsi_name)) # 删除3个数据中心(非强制,之后存储域变为Unattached状态) if dcapi.searchDataCenterByName(self.dm.dc_name): LogPrint().info("Post-Module-Test-4: Delete DataCenter '%s'." % self.dm.dc_name) self.assertTrue(dcapi.delDataCenter(self.dm.dc_name)["status_code"] == self.dm.expected_status_code_del_dc) # 删除3个Unattached状态的Data存储域和ISO/Export域(如果没有配置FC,则删除2个) LogPrint().info("Post-Module-Test-5: Delete all storage domains.") dict_sd_to_host = { self.dm.data1_nfs_name: self.dm.host1_name, self.dm.iso1_name: self.dm.host1_name, self.dm.export1_name: self.dm.host1_name, } for sd in dict_sd_to_host: smart_del_storage_domain(sd, self.dm.xml_del_sd_option, host_name=dict_sd_to_host[sd]) # 删除主机(host1和host4) LogPrint().info("Post-Module-Test-6: Delete all hosts.") for host_name in [self.dm.host1_name, self.dm.host4_name]: self.assertTrue(smart_del_host(host_name, self.dm.xml_del_host_option)) # 删除集群 if capi.searchClusterByName(self.dm.cluster_name): LogPrint().info("Post-Module-Test-7: Delete Cluster '%s'." % self.dm.cluster_name) self.assertTrue(capi.delCluster(self.dm.cluster_name)["status_code"] == self.dm.expected_status_code_del_dc)
def updateNetworkOfCluster(self, cluster_name, nw_name,data): ''' @summary: 更新附加到集群的网络信息 @param cluster_name: 集群名称 @param nw_name: 网络名称 @param data:更新的信息,xml文件 <network> <display>false</display> <usages> <usage>VM</usage> <usage>DISPLAY</usage> </usages> </network> @return: 字典,(1)status_code:请求返回状态码;(2)result:请求返回的内容。 ''' cluster_id = self.getClusterIdByName(cluster_name) dc_id = self.getClusterInfo(cluster_name)['result']['cluster']['data_center']['@id'] dc_name = DataCenterAPIs().getDataCenterNameById(dc_id) nw_id = NetworkAPIs().getNetworkIdByName(nw_name, dc_name) method = 'PUT' api_url = '%s/%s/networks/%s' % (self.base_url, cluster_id, nw_id) r = HttpClient.sendRequest(method=method, api_url=api_url,data=data) #r.raise_for_status() return {'status_code':r.status_code, 'result':xmltodict.parse(r.text)}
#--------------------------------------------------------------------------------- # Version Date Desc Author #--------------------------------------------------------------------------------- # V0.1 2014/10/17 初始版本 #--------------------------------------------------------------------------------- ''' import TestData.Network.ITC06_Setup as ModuleData from TestAPIs.DataCenterAPIs import DataCenterAPIs ''' @note: TestData nw_name_list[0]:含有特殊字符 nw_name_list[1]:16个字符(刚好超过15个) ''' dc_name = ModuleData.dc_name dc_id = DataCenterAPIs().getDataCenterIdByName(ModuleData.dc_name) nw_name_list = ['Network-1*#*', 'network123456789NETWORK'] nw_info = ''' <data_driver> <network> <name>%s</name> <data_center id= "%s"/> </network> <network> <name>%s</name> <data_center id= "%s"/> </network> </data_driver> ''' % (nw_name_list[0], dc_id, nw_name_list[1], dc_id) '''
# ChangeLog: #--------------------------------------------------------------------------------- # Version Date Desc Author #--------------------------------------------------------------------------------- # V0.1 2014/10/09 初始版本 Wei Keke #--------------------------------------------------------------------------------- ''' from TestAPIs.DataCenterAPIs import DataCenterAPIs from TestData.Profile import ITC09_SetUp as ModuleData ''' @note: PreData ''' nw_name = 'network_ITC09' dc_name = ModuleData.dc_name dc_id = DataCenterAPIs().getDataCenterIdByName(dc_name) profile_name = 'profile_ITC09' nw_info = ''' <network> <name>%s</name> <data_center id= "%s"/> </network> ''' % (nw_name, dc_id) # 字符串中的network id是通过外部调用的函数传递的,不在字符串中传递。 profile_info = ''' <vnic_profile> <name>profile_ITC09</name> <description>shelled</description> <network id="%s"/> <port_mirroring>false</port_mirroring>
def test_CreateModuleTestEnv(self): dcapi = DataCenterAPIs() capi = ClusterAPIs() # 创建1个数据中心(nfs类型) LogPrint().info("Pre-Module-Test-1: Create DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue( dcapi.createDataCenter(self.dm.xml_dc_info)['status_code'] == self.dm.expected_status_code_create_dc) # 创建1个集群 LogPrint().info( "Pre-Module-Test-2: Create Cluster '%s' in DataCenter '%s'." % (self.dm.cluster_nfs_name, self.dm.dc_nfs_name)) self.assertTrue( capi.createCluster(self.dm.xml_cluster_info)['status_code'] == self.dm.expected_status_code_create_cluster) # 在NFS数据中心中创建一个主机,并等待主机UP。 LogPrint().info( "Pre-Module-Test-3: Create Host '%s' in Cluster '%s'." % (self.dm.host1_name, self.dm.cluster_nfs_name)) self.assertTrue( smart_create_host(self.dm.host1_name, self.dm.xml_host_info)) # 为NFS数据中心创建Data(data1/data2/export)。 @BaseTestCase.drive_data(self, self.dm.xml_storage_info) def create_storage_domains(xml_storage_domain_info): sd_name = xmltodict.parse( xml_storage_domain_info)['storage_domain']['name'] LogPrint().info("Pre-Module-Test-4: Create Data Storage '%s'." % sd_name) self.assertTrue( smart_create_storage_domain(sd_name, xml_storage_domain_info)) create_storage_domains() # 将创建的的data1、data2和export域附加到NFS/ISCSI数据中心里。 LogPrint().info( "Pre-Module-Test-5: Attach the data storages to data centers.") self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) self.assertTrue( smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) #self.assertTrue(smart_attach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) #创建一个虚拟机 self.vmapi = VirtualMachineAPIs() r = self.vmapi.createVm(self.dm.vm_info) if r['status_code'] == 201: self.vm_name = r['result']['vm']['name'] else: LogPrint().error("Create vm failed.Status-code is WRONG.") self.assertTrue(False) #创建一个磁盘 self.diskapi = DiskAPIs() sd_id = StorageDomainAPIs().getStorageDomainIdByName( ModuleData.data1_nfs_name) r = self.diskapi.createDisk(self.dm.disk_info, sd_id) def is_disk_ok(): return self.diskapi.getDiskStatus(self.disk_id) == 'ok' if r['status_code'] == 202: self.disk_id = r['result']['disk']['@id'] if wait_until(is_disk_ok, 200, 5): LogPrint().info("Create disk ok.") else: LogPrint().error("Create disk failed.Status-code is WRONG.") self.assertTrue(False) #将磁盘附加到虚拟机 self.vmdiskapi = VmDiskAPIs() r = self.vmdiskapi.attachDiskToVm(self.vm_name, self.disk_id) if r['status_code'] == 200: LogPrint().info("Attach Disk to vm SUCCESS.") else: LogPrint().error("Attach Disk to vm fail.Status-code is WRONG.") self.assertTrue(False)
def test_TearDown(self): vmapi = VirtualMachineAPIs() #Step1:删除虚拟机 vmapi.delVm(self.dm.vm_name) dcapi = DataCenterAPIs() capi = ClusterAPIs() # Step2:将export存储域和data2存储域设置为Maintenance状态,然后从数据中心分离 # LogPrint().info("Post-Module-Test-1: Deactivate storage domains '%s'." % self.dm.export1_name) # self.assertTrue(smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) # LogPrint().info("Post-Module-Test-2: Detach storage domains '%s'." % self.dm.export1_name) # self.assertTrue(smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.export1_name)) LogPrint().info( "Post-Module-Test-3: Deactivate data storage domains '%s'." % self.dm.data2_nfs_name) self.assertTrue( smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) LogPrint().info( "Post-Module-Test-4: Detach data storage domains '%s'." % self.dm.data2_nfs_name) self.assertTrue( smart_detach_storage_domain(self.dm.dc_nfs_name, self.dm.data2_nfs_name)) # Step3:将data1存储域设置为Maintenance状态 LogPrint().info( "Post-Module-Test-5: Deactivate data storage domains '%s'." % self.dm.data1_nfs_name) self.assertTrue( smart_deactive_storage_domain(self.dm.dc_nfs_name, self.dm.data1_nfs_name)) # Step4:删除数据中心dc1(非强制,之后存储域变为Unattached状态) if dcapi.searchDataCenterByName( self.dm.dc_nfs_name)['result']['data_centers']: LogPrint().info("Post-Module-Test-6: Delete DataCenter '%s'." % self.dm.dc_nfs_name) self.assertTrue( dcapi.delDataCenter(self.dm.dc_nfs_name)['status_code'] == self.dm.expected_status_code_del_dc) # Step5:删除3个Unattached状态存储域(data1/data2/export1) LogPrint().info( "Post-Module-Test-7: Delete all unattached storage domains.") dict_sd_to_host = [self.dm.data1_nfs_name, self.dm.data2_nfs_name] for sd in dict_sd_to_host: smart_del_storage_domain(sd, self.dm.xml_del_sd_option, host_name=self.dm.host1_name) # Step6:删除主机(host1) LogPrint().info("Post-Module-Test-8: Delete host '%s'." % self.dm.host1_name) self.assertTrue( smart_del_host(self.dm.host1_name, self.dm.xml_del_host_option)) # Step7:删除集群cluster1 if capi.searchClusterByName( self.dm.cluster_nfs_name)['result']['clusters']: LogPrint().info("Post-Module-Test-9: Delete Cluster '%s'." % self.dm.cluster_nfs_name) self.assertTrue( capi.delCluster(self.dm.cluster_nfs_name)['status_code'] == self.dm.expected_status_code_del_dc)
def test_TearDown(self): dcapi = DataCenterAPIs() if dcapi.searchDataCenterByName(ModuleData.dc_name)["result"]["data_centers"]: LogPrint().info("Post-Module-Test: Delete DataCenter '%s'." % ModuleData.dc_name) dcapi.delDataCenter(ModuleData.dc_name)
def test_TearDown(self): dcapi = DataCenterAPIs() capi = ClusterAPIs() # Step1:将ISO域和Export域设置为Maintenance状态 LogPrint().info( "Post-Module-Test-1: Deactivate ISO and Export storage domains.") self.assertTrue( smart_deactive_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue( smart_deactive_storage_domain(self.dm.dc_name, self.dm.export1_name)) # Step2:将ISO域和Export域从对应的数据中心分离(detach) LogPrint().info( "Post-Module-Test-2: Deattch ISO and Export storage domains.") self.assertTrue( smart_detach_storage_domain(self.dm.dc_name, self.dm.iso1_name)) self.assertTrue( smart_detach_storage_domain(self.dm.dc_name, self.dm.export1_name)) # Step3:将Data存储域设置为Maintenance状态 LogPrint().info( "Post-Module-Test-3: Deactivate all data storage domains.") self.assertTrue( smart_deactive_storage_domain(self.dm.dc_name, self.dm.data1_nfs_name)) #self.assertTrue(smart_deactive_storage_domain(self.dm.dc_name, self.dm.data1_iscsi_name)) # 删除3个数据中心(非强制,之后存储域变为Unattached状态) if dcapi.searchDataCenterByName(self.dm.dc_name): LogPrint().info("Post-Module-Test-4: Delete DataCenter '%s'." % self.dm.dc_name) self.assertTrue( dcapi.delDataCenter(self.dm.dc_name)['status_code'] == self.dm.expected_status_code_del_dc) # 删除3个Unattached状态的Data存储域和ISO/Export域(如果没有配置FC,则删除2个) LogPrint().info("Post-Module-Test-5: Delete all storage domains.") dict_sd_to_host = { self.dm.data1_nfs_name: self.dm.host1_name, self.dm.iso1_name: self.dm.host1_name, self.dm.export1_name: self.dm.host1_name } for sd in dict_sd_to_host: smart_del_storage_domain(sd, self.dm.xml_del_sd_option, host_name=dict_sd_to_host[sd]) # 删除主机(host1和host4) LogPrint().info("Post-Module-Test-6: Delete all hosts.") for host_name in [self.dm.host1_name, self.dm.host4_name]: self.assertTrue( smart_del_host(host_name, self.dm.xml_del_host_option)) # 删除集群 if capi.searchClusterByName(self.dm.cluster_name): LogPrint().info("Post-Module-Test-7: Delete Cluster '%s'." % self.dm.cluster_name) self.assertTrue( capi.delCluster(self.dm.cluster_name)['status_code'] == self.dm.expected_status_code_del_dc)
return {'status_code':r.status_code, 'result':xmltodict.parse(r.text)} def detachNetworkFromCluster(self, cluster_name, nw_name, async=None): ''' @summary: 将附加到集群的网络进行分离 @param cluster_name: 集群名称 @param nw_name: 网络名称 @param async: 是否异步,xml文件 <action> <async>true</async> </action> @return: 字典,(1)status_code:请求返回状态码;(2)result:请求返回的内容。 ''' cluster_id = self.getClusterIdByName(cluster_name) dc_id = self.getClusterInfo(cluster_name)['result']['cluster']['data_center']['@id'] dc_name = DataCenterAPIs().getDataCenterNameById(dc_id) nw_id = NetworkAPIs().getNetworkIdByName(nw_name, dc_name) method = 'DELETE' api_url = '%s/%s/networks/%s' % (self.base_url, cluster_id, nw_id) r = HttpClient.sendRequest(method=method, api_url=api_url) #r.raise_for_status() return {'status_code':r.status_code, 'result':xmltodict.parse(r.text)} def updateNetworkOfCluster(self, cluster_name, nw_name,data): ''' @summary: 更新附加到集群的网络信息 @param cluster_name: 集群名称 @param nw_name: 网络名称 @param data:更新的信息,xml文件 <network> <display>false</display>