| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| """ Tests for DHCP DNS offload feature |
| """ |
| from marvin.cloudstackTestCase import cloudstackTestCase |
| import unittest |
| from marvin.lib.utils import (random_gen, validateList, cleanup_resources, get_hypervisor_type) |
| from marvin.lib.base import (Account, |
| NIC, |
| ServiceOffering, |
| DiskOffering, |
| VirtualMachine, |
| Network, |
| NetworkOffering, |
| Configurations, |
| Host, |
| Template, |
| SSHKeyPair, |
| Router) |
| from marvin.lib.common import (get_zone, |
| get_template, |
| get_domain |
| ) |
| from nose.plugins.attrib import attr |
| from marvin.codes import PASS,FAIL |
| from random import randint |
| import random,string,time,tempfile,os,re |
| |
| @unittest.skip("Skipping dhcp-dns-offload tests for now, since it requires external dhcp server") |
| class TestDeployVMs(cloudstackTestCase): |
| |
| @classmethod |
| def setUpClass(cls): |
| cls.testClient = super(TestDeployVMs, cls).getClsTestClient() |
| cls.api_client = cls.testClient.getApiClient() |
| cls.services = cls.testClient.getParsedTestDataConfig() |
| cls.hypervisor = (get_hypervisor_type(cls.api_client)).lower() |
| cls._cleanup = [] |
| cls.unsupportedHypervisor = False |
| if cls.hypervisor not in ["xenserver", "kvm"]: |
| cls.unsupportedHypervisor = True |
| return |
| cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests()) |
| cls.domain = get_domain(cls.api_client) |
| cls.services['mode'] = cls.zone.networktype |
| cls.userdata = "Deploy vm with userdata in shared network" |
| cls.template = get_template( |
| cls.api_client, |
| cls.zone.id, |
| cls.services["ostype"] |
| ) |
| cls.services["virtual_machine"]["zoneid"] = cls.zone.id |
| cls.services["virtual_machine"]["template"] = cls.template.id |
| try: |
| cls.service_offering = ServiceOffering.create( |
| cls.api_client, |
| cls.services["service_offering"] |
| ) |
| cls._cleanup.append(cls.service_offering) |
| cls.disk_offering = DiskOffering.create( |
| cls.api_client, |
| cls.services["disk_offering"] |
| ) |
| cls._cleanup.append(cls.disk_offering) |
| cls.network_offering1 = NetworkOffering.create( |
| cls.api_client, |
| cls.services["nw_off_no_services"], |
| ) |
| cls._cleanup.append(cls.network_offering1) |
| # Enable Network offering |
| cls.network_offering1.update(cls.api_client, state='Enabled') |
| cls.network_offering3 = NetworkOffering.create( |
| cls.api_client, |
| cls.services["network_offering_shared"], |
| ) |
| cls._cleanup.append(cls.network_offering3) |
| # Enable Network offering |
| cls.network_offering3.update(cls.api_client, state='Enabled') |
| #Create shared network without any services |
| cls.shared_network = Network.create( |
| cls.api_client, |
| cls.services["network2"], |
| networkofferingid=cls.network_offering1.id, |
| zoneid=cls.zone.id |
| ) |
| cls._cleanup.append(cls.shared_network) |
| #Verify network services in a created network |
| assert TestDeployVMs.list_nw_services(cls.shared_network.id, cls.network_offering1.id),\ |
| "Network Services does not match with the offering services" |
| #Register passowrd and ssh-key reset enabled template |
| template = "ssh-password-template-xen" if cls.hypervisor == "xenserver" else "ssh-password-template-kvm" |
| cls.pwd_template = Template.register(cls.api_client, |
| cls.services[template], |
| zoneid=cls.zone.id) |
| cls.pwd_template.download(cls.api_client) |
| cls._cleanup.append(cls.pwd_template) |
| except Exception as e: |
| cls.tearDownClass() |
| raise e |
| return |
| |
| @classmethod |
| def tearDownClass(cls): |
| try: |
| cls._cleanup = cls._cleanup[::-1] |
| cleanup_resources(cls.api_client, cls._cleanup) |
| except Exception as e: |
| raise Exception("Warning: Exception during cleanup : %s" % e) |
| |
| def setUp(self): |
| self.apiclient = self.testClient.getApiClient() |
| self.dbclient = self.testClient.getDbConnection() |
| self.cleanup = [] |
| self.tmp_files = [] |
| if self.unsupportedHypervisor: |
| self.skipTest("Skipping tests because suitable hypervisors not present") |
| |
| def tearDown(self): |
| try: |
| self.cleanup = self.cleanup[::-1] |
| cleanup_resources(self.apiclient, self.cleanup) |
| for tmp_file in self.tmp_files: |
| os.remove(tmp_file) |
| except Exception as e: |
| raise Exception("Warning: Exception during cleanup : %s" % e) |
| return |
| |
| def getVMIPAddress(self,id): |
| """ |
| This method retrieves the IP address from a deployed vm. |
| """ |
| params = ["externaldhcp.vmip.retrieval.interval","externaldhcp.vmip.max.retry"] |
| offload_params = {} |
| for param in params: |
| configs = Configurations.list( |
| self.apiclient, |
| name=param, |
| ) |
| self.assertEqual(validateList(configs)[0],PASS,"List config returned invalid response") |
| config = configs[0] |
| offload_params[param] = config |
| max_wait = int(offload_params[params[0]].value)*int(offload_params[params[1]].value) |
| wait = 0 |
| status = 0 |
| while(wait <= max_wait): |
| vm_res = VirtualMachine.list(self.apiclient,id=id) |
| self.assertEqual(validateList(vm_res)[0], PASS, "vm list returned invalid response") |
| for nic in vm_res[0].nic: |
| if nic.type == "Shared": |
| if nic.ipaddress is None: |
| time.sleep(int(offload_params[params[0]].value)) |
| wait += int(offload_params[params[0]].value) |
| status = 0 |
| break |
| else: |
| status = 1 |
| else: |
| continue |
| if status == 1: |
| self.debug("CS has retrieved the vm ip address from the hypervisor") |
| break |
| return [status, vm_res[0].nic[0].ipaddress] |
| |
| def list_nics(self, vm_id): |
| list_vm_res = VirtualMachine.list(self.apiclient, id=vm_id) |
| self.assertEqual(validateList(list_vm_res)[0], PASS, "List vms returned invalid response") |
| nics = list_vm_res[0].nic |
| for nic in nics: |
| if nic.type == "Shared": |
| nic_res = NIC.list( |
| self.apiclient, |
| virtualmachineid=vm_id, |
| nicid=nic.id |
| ) |
| nic_ip = nic_res[0].ipaddress |
| self.assertIsNotNone(nic_ip, "listNics API response does not have the ip address") |
| else: |
| continue |
| return |
| |
| def isConfigDriveIsoAttached(self, vm_ip): |
| """ |
| This method is to verify whether configdrive iso is attached to vm or not |
| Takes vm ip as the input |
| Returns mount path if config drive is attached else False |
| """ |
| mountdir = "/root/iso" |
| cmd = "blkid -t LABEL='config-2' /dev/sr? /dev/hd? /dev/sd? /dev/xvd? -o device" |
| try: |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True) |
| tmp_cmd = ['bash -c "if [ ! -d /root/iso ] ; then mkdir /root/iso ; fi"', "umount /root/iso"] |
| for tcmd in tmp_cmd: |
| ssh.execute(tcmd) |
| configDrive = ssh.execute(cmd) |
| res = ssh.execute("mount {} {}".format(str(configDrive[0]), mountdir)) |
| if str(res).lower().find("mounting read-only") > -1: |
| self.debug("configDrive iso has been mounted at location %s" % mountdir) |
| return mountdir |
| else: |
| return False |
| except Exception as e: |
| self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e)) |
| return False |
| |
| def verifyUserData(self, vm_ip, iso_path): |
| """ |
| Connect to vm and verify Userdata |
| """ |
| userdata_path = iso_path+"/cloudstack/userdata/user_data.txt" |
| try: |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True) |
| cmd = "cat %s" % userdata_path |
| res = ssh.execute(cmd) |
| if str(res).lower().find(self.userdata): |
| self.debug("Userdata is found in the attached configDriveIso") |
| return True |
| else: |
| self.debug("Userdata is not found in the attached configDriveIso") |
| return False |
| except Exception as e: |
| self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e)) |
| return False |
| |
| return |
| |
| def verifyPassword(self, vm_ip, iso_path): |
| password_file = iso_path+"/cloudstack/password/vm_password.txt" |
| try: |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True) |
| cmd = "cat %s" % password_file |
| res = ssh.execute(cmd) |
| if str(res).find("No such file or directory"): |
| self.debug("Password file is not found") |
| return False |
| elif str(res).lower().find("saved_password"): |
| self.debug("Reset password is not found in the attached configDriveIso") |
| return False |
| else: |
| self.debug("Reset Password is found in the attached configDriveIso") |
| return True |
| except Exception as e: |
| self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e)) |
| return False |
| return |
| |
| def verifySshKey(self, vm_ip, iso_path): |
| |
| publicKey_file = iso_path+"/cloudstack/metadata/public-keys.txt" |
| try: |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip) |
| cmd = "cat %s" % publicKey_file |
| res = ssh.execute(cmd) |
| if str(res).lower().find("saved_password"): |
| self.debug("Public Key is found in the attached configDriveIso") |
| return True |
| else: |
| self.debug("Public Key is not found in the attached configDriveIso") |
| return False |
| except Exception as e: |
| self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e)) |
| return False |
| return |
| |
| def getVMMetaData(self, vm_ip, iso_path): |
| |
| metadata_dir = iso_path+"/cloudstack/metadata/" |
| try: |
| response = {} |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True) |
| vm_files = ["availability-zone.txt", "instance-id.txt", "service-offering.txt", "vm-id.txt"] |
| for file in vm_files: |
| cmd = "cat %s" % metadata_dir+file |
| res = ssh.execute(cmd) |
| response[file] = res |
| except Exception as e: |
| self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e)) |
| return response |
| |
| def verifyMetaData(self, metadata): |
| |
| metadata_files = ["availability-zone.txt", "instance-id.txt", "service-offering.txt", "vm-id.txt"] |
| for mfile in metadata_files: |
| if mfile not in metadata: |
| self.fail("{} file is not found in vm metadata".format(mfile)) |
| self.assertEqual( |
| str(metadata["availability-zone.txt"][0]), |
| self.zone.name, |
| "Zone name inside metadata does not match with the zone" |
| ) |
| self.assertEqual( |
| str(metadata["instance-id.txt"][0]), |
| self.vm.instancename, |
| "vm name inside metadata does not match with the instance name" |
| ) |
| self.assertEqual( |
| str(metadata["service-offering.txt"][0]), |
| self.vm.serviceofferingname, |
| "Service offering inside metadata does not match with the instance offering" |
| ) |
| qresultset = self.dbclient.execute( |
| "select id from vm_instance where instance_name='%s';" % \ |
| self.vm.instancename) |
| self.assertEqual(validateList(qresultset)[0], PASS, "sql query returned invalid response") |
| self.assertEqual( |
| metadata["vm-id.txt"][0], |
| str(qresultset[0][0]), |
| "vm id in metadata does not match with the vm id from cloud db" |
| ) |
| return |
| |
| def generate_ssh_keys(self): |
| """ |
| This method generates ssh key pair and writes the private key into a temp file and returns the file name |
| """ |
| self.keypair = SSHKeyPair.create( |
| self.apiclient, |
| name=random_gen() + ".pem", |
| account="admin", |
| domainid=1 |
| ) |
| self.debug("Created keypair with name: %s" % self.keypair.name) |
| self.debug("Writing the private key to local file") |
| keyPairFilePath = tempfile.gettempdir() + os.sep + self.keypair.name |
| self.tmp_files.append(keyPairFilePath) |
| self.debug("File path: %s" % keyPairFilePath) |
| f = open(keyPairFilePath, "w+") |
| f.write(self.keypair.privatekey) |
| f.close() |
| os.system("chmod 400 " + keyPairFilePath) |
| return keyPairFilePath |
| |
| def verifyIPFetchEvent(self, ipaddr): |
| |
| id = self.dbclient.execute( |
| "select instance_id,id from nics where ip4_address='%s' and removed is null;" % ipaddr |
| ) |
| self.assertEqual( |
| validateList(id)[0], |
| PASS, |
| "sql query to select nic id returned invalid response" |
| ) |
| qresultset = self.dbclient.execute( |
| "select description from event where type='EXTERNAL.DHCP.VM.IP.FETCH' order by id desc limit 1;" |
| ) |
| self.assertEqual( |
| validateList(qresultset)[0], |
| PASS, |
| "sql query for IP Fetch event returned invalid response" |
| ) |
| return True if re.search("VM %s nic id %s ip address %s got fetched successfully" % \ |
| (id[0][0], id[0][1], ipaddr), str(qresultset[0])) else False |
| |
| def umountConfigDrive(self, vm_ip, iso_path): |
| """umount config drive iso attached inside guest vm""" |
| try: |
| self.debug("SSH into VM: %s" % vm_ip) |
| ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True) |
| ssh.execute("umount %s" % iso_path) |
| except Exception as e: |
| self.debug("SSH access failed for vm") |
| |
| @classmethod |
| def list_nw_services(cls, nw_id, nw_off_id): |
| """ |
| Verify network services in a network. List of services supported should be as per the |
| network offering with which it has been created. |
| return True if created network and network offering has same services else False |
| """ |
| nw_response = Network.list(cls.api_client, id = nw_id) |
| assert validateList(nw_response)[0] == PASS, "list networks returned invalid response" |
| nw_services = [service.name for service in nw_response[0].service] |
| nw_off_res = NetworkOffering.list(cls.api_client, id = nw_off_id) |
| assert validateList(nw_off_res)[0] == PASS, "list network offerings returned invalid response" |
| nw_off_services = [service.name for service in nw_off_res[0].service] |
| if len(nw_services) == len(nw_off_services) and len(nw_services) == 0: |
| return True |
| elif len(nw_services) != len(nw_off_services): |
| return False |
| for srv in nw_services: |
| if srv not in nw_off_services: |
| return False |
| return True |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_01_createNetworks_TC3(self): |
| |
| """ |
| Create shared networks with all the network offerings created in the setupClass method |
| """ |
| nw_offs = [self.network_offering3] |
| vlan = self.services["network2"]["vlan"] |
| name = self.services["network2"]["name"] |
| for nw_off in nw_offs: |
| self.services["network2"]["name"]="SharedNetwork%s" % randint(1, 10) |
| try: |
| self.services["network2"]["vlan"] += 1 |
| self.shared_network = Network.create( |
| self.apiclient, |
| self.services["network2"], |
| networkofferingid=nw_off.id, |
| zoneid=self.zone.id |
| ) |
| self.cleanup.append(self.shared_network) |
| self.assertTrue( |
| TestDeployVMs.list_nw_services(self.shared_network.id, nw_off.id), |
| "Network services not matched with network offering services" |
| ) |
| except Exception as e: |
| self.fail("Shared network creation with network offering %s failed with error: %s" % (nw_off, e)) |
| self.services["network2"]["vlan"] = vlan |
| self.services["network2"]["name"] = name |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_02_deployVM_nw_without_services_TC6(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_03_deployVM_with_userdata_TC7(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with userdata in the above network |
| 3.Verify vm deployment |
| 4.Verify IP Address retrieval |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation with userdata failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_04_deploy_win_VM_with_userdata_TC8(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy windows vm in the above network |
| 3.Verify IP address retrieval |
| """ |
| self.skipTest("Skip windows tests for now") |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.shared_network = Network.create( |
| self.apiclient, |
| self.services["network2"], |
| networkofferingid=self.network_offering1.id, |
| zoneid=self.zone.id |
| ) |
| self.cleanup.append(self.shared_network) |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.win_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "FAIL:VM Creation failed with windows template in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm_id) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_06_deployVM_with_userdata_TC11(self): |
| """ |
| 1.Create shared network with DHCP,DNS and userdata services provided by VR |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| """ |
| vlan = self.services["network2"]["vlan"] |
| self.services["network2"]["vlan"] += 1 |
| self.shared_network = Network.create( |
| self.apiclient, |
| self.services["network2"], |
| networkofferingid=self.network_offering3.id, |
| zoneid=self.zone.id |
| ) |
| self.cleanup.append(self.shared_network) |
| self.services["network2"]["vlan"] = vlan |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm with in a shared network with DHCP and userdata services provided by VR" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #To make sure that vm got the ip address as part of the cs allocation process check user_ip_address table |
| #for allocated state for the assigned ip address |
| qresultset = self.dbclient.execute( |
| "select allocated from user_ip_address where public_ip_address='%s' and removed is null;" % \ |
| self.vm.nic[0].ipaddress) |
| self.assertEqual(validateList(qresultset)[0],PASS,"sql query returned invalid response") |
| self.assertNotEqual( |
| qresultset[0], |
| 'NULL', |
| "VM didn't get ip address as part of CS IP allocation process\ |
| It might have got from external dhcp server in that network") |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_07_deployVM_with_userdata_VR_TC12(self): |
| """ |
| 1.Create shared network with only userdata service and VR as the provider |
| 2.Verify that network offering creation should fail |
| """ |
| try: |
| self.network_offering4 = NetworkOffering.create( |
| self.api_client, |
| self.services["nw_off_userdata_VR"], |
| ) |
| self.fail("NO creation with vr as the userdata provider should not be allowed\ |
| since VR in not the dhcp provider") |
| except Exception as e: |
| self.debug("NO creation failed as expected with error message %s" % e) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_09_StopStartVMAndGetVMIpAddress_TC16(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Stop start vm and repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm stop start" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm deployment" |
| ) |
| #Stop/Start VM and verify the IP address retrieval |
| self.vm.stop(self.apiclient) |
| self.vm.start(self.apiclient) |
| time.sleep(60) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm stop start" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm stop start" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm stop start" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_10_RebootVMAndGetVMIpAddress_TC17(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Reboot vm and repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.cleanup.append(self.vm) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm reboot |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before reboot" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed while deploying" |
| ) |
| #Reboot VM and verify the IP address retrieval |
| self.vm.reboot(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reboot" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reboot" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm reboot" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_11_DestroyVMAndGetVMIpAddress_TC18(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Destroy,restore vm and repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm destroy |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before destroy" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed while deploying" |
| ) |
| #Destroy VM and verify the IP address retrieval |
| self.vm.delete(self.apiclient,expunge=False) |
| self.vm.recover(self.apiclient) |
| self.vm.start(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reboot" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reboot" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm reboot" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_12_ReInstallVMAndGetVMIpAddress_TC19(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Reinstall vm to same template and repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm reinstall |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before reinstall" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr,configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed while deploying" |
| ) |
| #Reinstall VM and verify the IP address retrieval |
| self.vm.restore(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reinstall" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reinstall" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm reinstall" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_13_MigrateVMAndGetVMIpAddress_TC20(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Live Migrate vm to another host in the cluster and repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before live migrate" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed while deploying" |
| ) |
| self.umountConfigDrive(ip_addr, configDrive_iso) |
| hosts = Host.listForMigration(self.apiclient,virtualmachineid=self.vm.id) |
| self.assertEqual(validateList(hosts)[0], PASS, "Find hosts for migration returned invalid response") |
| if len(hosts) < 1: |
| self.skipTest("No suitable hosts found for vm migration..so skipping test") |
| hostid = hosts[0].id |
| self.vm.migrate(self.apiclient,hostid=hostid) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm live migrate" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm live migrate" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm live migrate" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_14_VM_with_password_enabled_template_TC24(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with password enabled template |
| 3.Verify accessing vm with the CS generated password |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services with password enabled template" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with new password: %s" % |
| (self.vm.ssh_ip, e)) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_15_reset_password_TC27(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with password enabled template |
| 3.Reset password |
| 4.Verify accessing vm with the new password |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| self.vm.stop(self.apiclient) |
| self.debug("Resetting VM password for VM: %s" % self.vm.name) |
| self.vm_password = self.vm.resetPassword(self.apiclient) |
| self.debug("Password reset to: %s" % self.vm_password) |
| self.debug("Starting VM to verify new password..") |
| self.vm.start(self.apiclient) |
| self.debug("VM - %s stated!" % self.vm.name) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.password = self.vm_password |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with new password: %s" % |
| (self.vm.ssh_ip, e)) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_16_deployVM_with_sshkeys_TC26(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with ssh key reset script enabled template |
| 3.Verify vm access with new keys |
| """ |
| #generate key pair and get private key file name by calling below function |
| ssh_pvt_key = self.generate_ssh_keys() |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| keypair=self.keypair.name |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm with ssh key pair" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(ssh_pvt_key)) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with ssh key pair: %s" % |
| (self.vm.ssh_ip, e)) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_17_reset_sshkeys_TC29(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with ssh key reset script enabled template |
| 3.Reset keys |
| 4.Verify vm access with new keys |
| """ |
| #generate key pair and get private key file name by calling below function |
| self.generate_ssh_keys() |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| keypair=self.keypair.name |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm with ssh key pair" |
| ) |
| self.cleanup.append(self.vm) |
| try: |
| self.vm.stop(self.apiclient) |
| except Exception as e: |
| self.fail("Failed to stop virtual machine %s with error %s" % (self.vm.id, e)) |
| self.debug("Creating a new SSH keypair") |
| new_pvt_key = self.generate_ssh_keys() |
| try: |
| self.vm.resetSshKey( |
| self.apiclient, |
| keypair=self.keypair.name, |
| name=self.keypair.name, |
| account="admin", |
| domainid=1 |
| ) |
| except Exception as e: |
| self.fail("Failed to reset SSH key: %s, %s" % (self.vm.name, e)) |
| self.debug("Starting the virtual machine after resetting the keypair") |
| try: |
| self.vm.start(self.apiclient) |
| except Exception as e: |
| self.fail("Failed to start virtual machine: %s, %s" % (self.vm.name, e)) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key)) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with ssh key pair with error: %s" % |
| (self.vm.ssh_ip, e)) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_18_reset_password_verify_after_vm_restart_TC36(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with password enabled template |
| 3.Reset password |
| 4.Verify accessing vm with the new password |
| 5.Stop/Start vm and repeat step 4 |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| self.vm.stop(self.apiclient) |
| self.debug("Resetting VM password for VM: %s" % self.vm.name) |
| self.vm_password = self.vm.resetPassword(self.apiclient) |
| self.debug("Password reset to: %s" % self.vm_password) |
| self.debug("Starting VM to verify new password..") |
| self.vm.start(self.apiclient) |
| self.debug("VM - %s stated!" % self.vm.name) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.password = self.vm_password |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with new password: %s" % |
| (self.vm.ssh_ip, e)) |
| #Stop start vm and verify connecting to vm with the same password |
| self.vm.stop(self.apiclient) |
| self.vm.start(self.apiclient) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| try: |
| self.debug("SSH into vm after stop start") |
| self.vm.password = self.vm_password |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True) |
| except Exception as e: |
| self.fail("SSH into vm failed with the same password after vm stop start") |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_19_reset_sshkeys_verify_after_vm_restartTC37(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with ssh key reset script enabled template |
| 3.Reset keys |
| 4.Verify vm access with new keys |
| 5.Stop/start vm and repeat step4 |
| """ |
| #generate key pair and get private key file name by calling below function |
| self.generate_ssh_keys() |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.pwd_template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| keypair=self.keypair.name |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm with ssh key pair" |
| ) |
| self.cleanup.append(self.vm) |
| try: |
| self.vm.stop(self.apiclient) |
| except Exception as e: |
| self.fail("Failed to stop virtual machine %s with error %s" % (self.vm.id, e)) |
| self.debug("Creating a new SSH keypair") |
| new_pvt_key = self.generate_ssh_keys() |
| try: |
| self.vm.resetSshKey( |
| self.apiclient, |
| keypair=self.keypair.name, |
| name=self.keypair.name, |
| account="admin", |
| domainid=1 |
| ) |
| except Exception as e: |
| self.fail("Failed to reset SSH key: %s, %s" % (self.vm.name, e)) |
| self.debug("Starting the virtual machine after resetting the keypair") |
| try: |
| self.vm.start(self.apiclient) |
| except Exception as e: |
| self.fail("Failed to start virtual machine: %s, %s" % (self.vm.name, e)) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| try: |
| self.debug("SSHing into VM: %s" % ip_addr) |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key)) |
| except Exception as e: |
| self.fail("SSH into VM: %s failed with ssh key pair with error: %s" % |
| (self.vm.ssh_ip, e)) |
| self.vm.stop(self.apiclient) |
| self.vm.start(self.apiclient) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| try: |
| self.debug("SSH into vm after vm stop/start") |
| self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key)) |
| except Exception as e: |
| self.fail("SSH into vm failed with new ssh keypair after vm stop start") |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_20_verify_VM_metadata_TC30(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with userdata in the above network |
| 3.Verify vm deployment |
| 4.Verify IP Address retrieval |
| 5.Verify metadata inside configdrive iso |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm with in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_21_StopStartVM_verify_ConfigDrive_TC31(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval and userdata |
| 5.Stop start vm |
| 6.Verify userdata and metadata |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before vm stop start" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr,configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm deployment" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| #Stop/Start VM and verify IP address retrieval,userdata and metadata |
| self.vm.stop(self.apiclient) |
| self.vm.start(self.apiclient) |
| time.sleep(60) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm stop start" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm stop start" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm stop start" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_22_RebootVM_verify_ConfigDrive_TC32(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval,userdata and metadata |
| 5.Reboot vm |
| 6.Repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before vm reboot" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm deployment" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| #Reboot VM and verify IP address retrieval,userdata and metadata |
| self.vm.reboot(self.apiclient) |
| time.sleep(60) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reboot" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reboot" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm reboot" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_23_DestroyVM_verify_ConfigDrive_TC33(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval,userdata and metadata |
| 5.Destroy and restore vm |
| 6.Repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before vm destroy" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm deployment" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| #Destroy VM and verify IP address retrieval,userdata and metadata |
| self.vm.delete(self.apiclient, expunge=False) |
| self.vm.recover(self.apiclient) |
| self.vm.start(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm destroy" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm destroy" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching after vm destroy" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_24_ReInstallVM_verify_ConfigDrive_TC34(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval,userdata and metadata |
| 5.Reinstall vm to the same template |
| 6.Repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before vm reinstall" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm reinstall" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| #Reinstall VM and verify the IP address retrieval |
| self.vm.restore(self.apiclient) |
| time.sleep(60) |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reinstall" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reinstall" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr,configDrive_iso), |
| True, |
| "Userdata is not matching after vm reinstall" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_25_MigrateVMVM_verify_ConfigDrive_TC35(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm with default cent os template and pass user data |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval,userdata and metadata |
| 5.Migrate VM and Repeat step4 |
| """ |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| diskofferingid=self.disk_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "Failed to create vm in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| self.list_nics(self.vm.id) |
| #Verify configdrive iso attach before vm stop/start |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm before vm reinstall" |
| ) |
| #Add userdata verification test |
| self.assertEqual( |
| self.verifyUserData(ip_addr, configDrive_iso), |
| True, |
| "Userdata is not matching with the data passed in vm reinstall" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| #Migrate VM and verify ip address retrieval,userdata and metadata |
| hosts = Host.listForMigration(self.apiclient,virtualmachineid=self.vm.id) |
| self.assertEqual(validateList(hosts)[0], PASS, "Find hosts for migration returned invalid response") |
| if len(hosts) < 1: |
| self.skipTest("No suitable hosts found for vm migration..so skipping test") |
| hostid = hosts[0].id |
| self.umountConfigDrive(ip_addr, configDrive_iso) |
| self.vm.migrate(self.apiclient, hostid=hostid) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm reinstall" |
| ) |
| self.list_nics(self.vm.id) |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm after vm reinstall" |
| ) |
| self.assertEqual( |
| self.verifyUserData(ip_addr,configDrive_iso), |
| True, |
| "Userdata is not matching after vm reinstall" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_26_DeployVM_verify_IPFetchEvent_TC56(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB |
| self.assertEqual( |
| self.verifyIPFetchEvent(ip_addr), |
| True, |
| "EXTERNAL.DHCP.VM.IP.FETCH is not generated" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_27_StopStartVM_verify_IPFetchEvent_TC57(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval |
| 6.Stop/Start vm and repeat step5 |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB |
| self.assertEqual( |
| self.verifyIPFetchEvent(ip_addr), |
| True, |
| "EXTERNAL.DHCP.VM.IP.FETCH is not generated" |
| ) |
| #Stop/Start VM and verify IP address retrieval,event notification |
| self.vm.stop(self.apiclient) |
| self.vm.start(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm stop start" |
| ) |
| #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB |
| self.assertEqual( |
| self.verifyIPFetchEvent(ip_addr), |
| True, |
| "EXTERNAL.DHCP.VM.IP.FETCH is not generated" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_28_RebootVM_verify_IPFetchEvent_TC58(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval |
| 6.Reboot vm and repeat step5 |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB |
| self.assertEqual( |
| self.verifyIPFetchEvent(ip_addr), |
| True, |
| "EXTERNAL.DHCP.VM.IP.FETCH is not generated" |
| ) |
| #Reboot VM and verify IP address retrieval,event notification |
| self.vm.reboot(self.apiclient) |
| time.sleep(60) |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address after vm stop start" |
| ) |
| #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB |
| self.assertEqual( |
| self.verifyIPFetchEvent(ip_addr), |
| True, |
| "EXTERNAL.DHCP.VM.IP.FETCH is not generated" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_29_deployVM_In_Two_Networks_TC49(self): |
| """ |
| 1.Create shared network without any services |
| 2.Create isolated network with VR as the service provider |
| 2.Deploy vm in both the networks |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Verify metadata |
| """ |
| self.no_isolate = NetworkOffering.create( |
| self.apiclient, |
| self.services["isolated_network_offering"] |
| ) |
| self.no_isolate.update(self.apiclient, state='Enabled') |
| self.isolated_network = Network.create( |
| self.apiclient, |
| self.services["network"], |
| networkofferingid=self.no_isolate.id, |
| zoneid=self.zone.id, |
| accountid="admin", |
| domainid=1 |
| ) |
| self.cleanup.append(self.isolated_network) |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id, self.isolated_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_30_deployVM_In_Two_Networks_TC50(self): |
| """ |
| 1.Create shared network without any services |
| 2.Create another shared network with VR as the service provider |
| 2.Deploy vm in both the networks |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Verify metadata |
| """ |
| self.services["shared_network_offering_all_services"]["specifyVlan"]="True" |
| self.services["shared_network_offering_all_services"]["specifyIpRanges"]="True" |
| self.no_shared_vr = NetworkOffering.create( |
| self.apiclient, |
| self.services["shared_network_offering_all_services"] |
| ) |
| self.no_shared_vr.update(self.apiclient, state='Enabled') |
| self.services["shared_network"]["vlan"] = self.services["vlan"] |
| self.services["shared_network"]["gateway"] = self.services["gateway"] |
| self.services["shared_network"]["netmask"] = self.services["netmask"] |
| self.services["shared_network"]["startip"] = self.services["startip"] |
| self.services["shared_network"]["endip"] = self.services["endip"] |
| self.shared_network2 = Network.create( |
| self.apiclient, |
| self.services["shared_network"], |
| networkofferingid=self.no_shared_vr.id, |
| zoneid=self.zone.id, |
| accountid="admin", |
| domainid=1 |
| ) |
| self.cleanup.append(self.shared_network2) |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id, self.shared_network2.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status,ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| #Verify config drive is attached to vm or not |
| configDrive_iso = self.isConfigDriveIsoAttached(ip_addr) |
| self.assertNotEqual( |
| configDrive_iso, |
| False, |
| "Config drive iso is not attached to vm" |
| ) |
| metadata = self.getVMMetaData(ip_addr, configDrive_iso) |
| self.verifyMetaData(metadata) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_31_deployVM_with_userdataByVR_TC38(self): |
| """ |
| 1.Create shared network with userdata service and VR as the provider |
| 2.Deploy vm with userdata in the above network |
| 3.Verify vm deployment |
| 4.Verify IP Address retrieval |
| """ |
| self.skipTest("this combination is not supported") |
| self.services["virtual_machine"]["userdata"] = self.userdata |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation with userdata failed in a shared network with VR as the provider" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| vr_res = Router.list( |
| self.apiclient, |
| networkid=self.shared_network.id, |
| listAll=True |
| ) |
| self.assertEqual(validateList(vr_res)[0],PASS,"List Routers returned invalid response") |
| vr_ip = vr_res[0].guestipaddress |
| ssh = self.vm.get_ssh_client(ipaddress=ip_addr) |
| cmd = "curl http://%s/latest/user-data" % vr_ip |
| res = ssh.execute(cmd) |
| self.assertEqual( |
| str(res), |
| self.userdata, |
| "Failed to get the userdata from VR in shared network" |
| ) |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_32_restart_network_TC6(self): |
| """ |
| 1.Create shared network without any services |
| 2.Deploy vm in that network |
| 3.Verify vm deployment |
| 4.Verify IP address retrieval |
| 5.Restart network and verify access to VM |
| """ |
| self.vm = VirtualMachine.create( |
| self.apiclient, |
| self.services["virtual_machine"], |
| templateid=self.template.id, |
| accountid="admin", |
| domainid=1, |
| serviceofferingid=self.service_offering.id, |
| zoneid=self.zone.id, |
| networkids=[self.shared_network.id], |
| ) |
| self.assertIsNotNone( |
| self.vm, |
| "VM creation failed in a shared network without any services" |
| ) |
| self.cleanup.append(self.vm) |
| #Verify IP address retrieval using listVirtualMachines API |
| ip_status, ip_addr = self.getVMIPAddress(self.vm.id) |
| self.assertEqual( |
| ip_status, |
| 1, |
| "Failed to retrieve vm ip address" |
| ) |
| #Verify the retrieved ip address in listNICs API response |
| self.list_nics(self.vm.id) |
| res = self.shared_network.restart(self.apiclient, cleanup=True) |
| if res.success: |
| self.assertEqual( |
| res.success, |
| True, |
| "Failed to restart shared network without any services" |
| ) |
| else: |
| self.fail("Failed restarting shared network without any services") |
| return |
| |
| @attr(tags=["advanced"], required_hardware='True') |
| def test_33_verify_config_params_TC65(self): |
| """ |
| #@desc: Validate external dhcp config parameters against invalid values |
| #1.Generate random values using special characters, strings and numbers |
| #2.Try to update the config params with those values. |
| #3.Verify that invalid values are not allowed |
| """ |
| params = ["externaldhcp.vmip.retrieval.interval","externaldhcp.vmip.max.retry",\ |
| "externaldhcp.vmipFetch.threadPool.max"] |
| for param in params: |
| random_num = ''.join(random.choice(string.digits + string.punctuation + string.ascii_letters) \ |
| for _ in range(3)) |
| try: |
| Configurations.update( |
| self.apiclient, |
| name=param, |
| value=random_num |
| ) |
| self.fail("FAIL:{} takes invalid value".format(param)) |
| except Exception as e: |
| self.debug("Success: Updating dhcp config params with invalid values is not allowed\ |
| and throws following message: %s" % e) |
| return |