def tearDownClass(cls): try: clusterList = Cluster.list(cls.apiclient, id=cls.cluster.id) if clusterList[0].allocationstate.lower() == DISABLED.lower(): cmd = updateCluster.updateClusterCmd() cmd.id = clusterList[0].id cmd.allocationstate = ENABLED cls.apiclient.updateCluster(cmd) if clusterList[0].managedstate.lower() == "unmanaged": cmd = updateCluster.updateClusterCmd() cmd.id = clusterList[0].id cmd.managedstate = "Managed" cls.apiclient.updateCluster(cmd) cleanup_resources(cls.apiclient, cls._cleanup) except Exception as e: raise Exception("Warning: Exception during cleanup : %s" % e)
def test_01_disable_enable_cluster(self): """disable enable cluster 1. Disable cluster and verify following things: For admin user: --Should be able to create new vm, snapshot, volume,template,iso in the same cluster For Non-admin user: --Should not be able create new vm, snapshot, volume,template,iso in the same cluster 2. Enable the above disabled cluster and verify that: -All users should be create to deploy new vm, snapshot, volume,template,iso in the same cluster 3. Disable the managestate of the cluster and verify that: --Host in the cluster should get disconnected --VM's in the cluster are ping-able and ssh to --Creation of new VM in the cluster should fail 4. Enable the managestate of the cluster and verify that: --Hosts in the cluster get connected --VM's in the cluster are accessible 5. Try to delete the cluster and it should fail with error message: -"The cluster is not deletable because there are servers running in this cluster" """ # Step 1 vm_user = VirtualMachine.create( self.userapiclient, self.testdata["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, mode=self.zone.networktype, ) self.vm_list.append(vm_user) vm_root = VirtualMachine.create( self.apiclient, self.testdata["small"], templateid=self.template.id, accountid=self.admin_account.name, domainid=self.admin_account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, mode=self.zone.networktype, ) self.vm_list.append(vm_root) cmd = updateCluster.updateClusterCmd() cmd.id = self.cluster.id cmd.allocationstate = DISABLED self.apiclient.updateCluster(cmd) clusterList = Cluster.list(self.apiclient, id=self.cluster.id) self.assertEqual(clusterList[0].allocationstate, DISABLED, "Check if the cluster is in disabled state") # Verify the existing vms should be running self.assertEqual(vm_user.state.lower(), "running", "Verify that the user vm is running") self.assertEqual(vm_root.state.lower(), "running", "Verify that the root vm is running") VirtualMachine.create( self.apiclient, self.testdata["small"], templateid=self.template.id, accountid=self.admin_account.name, domainid=self.admin_account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, ) root_volume = list_volumes(self.apiclient, virtualmachineid=vm_root.id, type="ROOT", listall=True) self.assertEqual( validateList(root_volume)[0], PASS, "list root volume response is empty for volume id %s" % vm_root.id ) if self.snapshotSupported: Snapshot.create(self.apiclient, root_volume[0].id) snapshots = list_snapshots(self.apiclient, volumeid=root_volume[0].id, listall=True) self.assertEqual( validateList(snapshots)[0], PASS, "list snapshot is empty for volume id %s" % root_volume[0].id ) Template.create_from_snapshot(self.apiclient, snapshots[0], self.testdata["privatetemplate"]) builtin_info = get_builtin_template_info(self.apiclient, self.zone.id) self.testdata["privatetemplate"]["url"] = builtin_info[0] self.testdata["privatetemplate"]["hypervisor"] = builtin_info[1] self.testdata["privatetemplate"]["format"] = builtin_info[2] Template.register(self.apiclient, self.testdata["privatetemplate"], zoneid=self.zone.id) Volume.create( self.apiclient, self.testdata["volume"], zoneid=self.zone.id, account=self.admin_account.name, domainid=self.admin_account.domainid, diskofferingid=self.disk_offering.id, ) Iso.create( self.apiclient, self.testdata["iso2"], zoneid=self.zone.id, account=self.admin_account.name, domainid=self.admin_account.domainid, ) # non-admin user should fail to create vm, snap, temp etc with self.assertRaises(Exception): VirtualMachine.create( self.userapiclient, self.testdata["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, mode=self.zone.networktype, ) root_volume = list_volumes(self.userapiclient, virtualmachineid=vm_user.id, type="ROOT", listall=True) self.assertEqual( validateList(root_volume)[0], PASS, "list root volume response is empty for volume id %s" % vm_user.id ) if self.snapshotSupported: Snapshot.create(self.userapiclient, root_volume[0].id) Template.register(self.userapiclient, self.testdata["privatetemplate"], zoneid=self.zone.id) Volume.create( self.userapiclient, self.testdata["volume"], zoneid=self.zone.id, account=self.account.name, domainid=self.account.domainid, diskofferingid=self.disk_offering.id, ) Iso.create( self.userapiclient, self.testdata["iso2"], zoneid=self.zone.id, account=self.account.name, domainid=self.account.domainid, ) # Step 2 cmd.allocationstate = ENABLED self.apiclient.updateCluster(cmd) clusterList = Cluster.list(self.apiclient, id=self.cluster.id) self.assertEqual(clusterList[0].allocationstate, ENABLED, "Check if the cluster is in disabled state") # After enabling the zone all users should be able to add new VM, # volume, templatee and iso root_vm_new = VirtualMachine.create( self.apiclient, self.testdata["small"], templateid=self.template.id, accountid=self.admin_account.name, domainid=self.admin_account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, ) self.assertEqual(root_vm_new.state.lower(), "running", "Verify that admin should create new VM") if self.snapshotSupported: Snapshot.create(self.apiclient, root_volume[0].id) # Non root user user_vm_new = VirtualMachine.create( self.userapiclient, self.testdata["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, ) self.assertEqual(user_vm_new.state.lower(), "running", "Verify that admin should create new VM") if self.snapshotSupported: Snapshot.create(self.userapiclient, root_volume[0].id) # Step 3 cmd = updateCluster.updateClusterCmd() cmd.id = self.cluster.id cmd.managedstate = "Unmanaged" self.apiclient.updateCluster(cmd) clusterList = Cluster.list(self.apiclient, id=self.cluster.id) self.assertEqual( clusterList[0].managedstate.lower(), "unmanaged", "Check if the cluster is in unmanaged state" ) # Hosts in the cluster takes some time to go into disconnected state time.sleep(60) hostList = Host.list(self.apiclient, clusterid=self.cluster.id) for host in hostList: self.assertEqual(host.state.lower(), "disconnected", "Check if host in the cluster gets disconnected") exception_list = [] for vm in self.vm_list: try: SshClient(vm.ssh_ip, vm.ssh_port, vm.username, vm.password) except Exception as e: exception_list.append(e) self.assertEqual(len(exception_list), 0, "Check if vm's are accesible") # non-admin user should fail to create vm, snap, temp etc with self.assertRaises(Exception): VirtualMachine.create( self.userapiclient, self.testdata["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, mode=self.zone.networktype, ) root_volume = list_volumes(self.userapiclient, virtualmachineid=vm_user.id, type="ROOT", listall=True) if self.snapshotSupported: with self.assertRaises(Exception): Snapshot.create(self.userapiclient, root_volume[0].id) Template.register(self.userapiclient, self.testdata["privatetemplate"], zoneid=self.zone.id) # Step 4 cmd.managedstate = "Managed" self.apiclient.updateCluster(cmd) # After changing the cluster's managestate to Managed hosts in the # cluster takes some time to come back to Up state time.sleep(120) hostList = Host.list(self.apiclient, clusterid=self.cluster.id) for host in hostList: self.assertEqual(host.state.lower(), "up", "Check if host in the cluster gets up") vm_root.stop(self.apiclient) vm_user.stop(self.apiclient) root_state = self.dbclient.execute("select state from vm_instance where name='%s'" % vm_root.name)[0][0] user_state = self.dbclient.execute("select state from vm_instance where name='%s'" % vm_user.name)[0][0] self.assertEqual(root_state, "Stopped", "verify that vm should stop") self.assertEqual(user_state, "Stopped", "verify that vm should stop") root_vm_new = VirtualMachine.create( self.apiclient, self.testdata["small"], templateid=self.template.id, accountid=self.admin_account.name, domainid=self.admin_account.domainid, serviceofferingid=self.service_offering.id, zoneid=self.zone.id, ) self.assertEqual(root_vm_new.state.lower(), "running", "Verify that admin should create new VM") # Step 5 # Deletion of zone should fail if resources are running on the zone with self.assertRaises(Exception): self.pod.delete(self.apiclient) return