X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=functest%2Fcore%2Fsinglevm.py;h=b3a1417f6def0eb538b7786b75989fc40edcacad;hb=904377462f58464937d4cafeb8c432f024a85bd4;hp=f6abb7427e9e9c96089ac9c0946c0d80476b0fd1;hpb=86a239dba6e5c2abced2b1de53e57aba3c04b82c;p=functest.git diff --git a/functest/core/singlevm.py b/functest/core/singlevm.py index f6abb7427..b3a1417f6 100644 --- a/functest/core/singlevm.py +++ b/functest/core/singlevm.py @@ -9,7 +9,7 @@ """Ease deploying a single VM reachable via ssh -It offers a simple way to create all tenant network ressources + a VM for +It offers a simple way to create all tenant network resources + a VM for advanced testcases (e.g. deploying an orchestrator). """ @@ -23,6 +23,8 @@ from xtesting.core import testcase from functest.core import tenantnetwork from functest.utils import config +from functest.utils import env +from functest.utils import functest_utils class VmReady1(tenantnetwork.TenantNetwork1): @@ -39,10 +41,11 @@ class VmReady1(tenantnetwork.TenantNetwork1): __logger = logging.getLogger(__name__) filename = '/home/opnfv/functest/images/cirros-0.4.0-x86_64-disk.img' image_format = 'qcow2' - filename_alt = None + extra_properties = {} + filename_alt = filename image_alt_format = image_format + extra_alt_properties = extra_properties visibility = 'private' - extra_properties = None flavor_ram = 512 flavor_vcpus = 1 flavor_disk = 1 @@ -50,14 +53,13 @@ class VmReady1(tenantnetwork.TenantNetwork1): flavor_alt_ram = 1024 flavor_alt_vcpus = 1 flavor_alt_disk = 1 - flavor_alt_extra_specs = {} + flavor_alt_extra_specs = flavor_extra_specs create_server_timeout = 180 def __init__(self, **kwargs): if "case_name" not in kwargs: kwargs["case_name"] = 'vmready1' super(VmReady1, self).__init__(**kwargs) - self.orig_cloud = self.cloud self.image = None self.flavor = None @@ -72,14 +74,20 @@ class VmReady1(tenantnetwork.TenantNetwork1): Raises: expection on error """ assert self.cloud + extra_properties = self.extra_properties.copy() + if env.get('IMAGE_PROPERTIES'): + extra_properties.update( + functest_utils.convert_ini_to_dict( + env.get('IMAGE_PROPERTIES'))) + extra_properties.update( + getattr(config.CONF, '{}_extra_properties'.format( + self.case_name), {})) image = self.cloud.create_image( name if name else '{}-img_{}'.format(self.case_name, self.guid), filename=getattr( config.CONF, '{}_image'.format(self.case_name), self.filename), - meta=getattr( - config.CONF, '{}_extra_properties'.format(self.case_name), - self.extra_properties), + meta=extra_properties, disk_format=getattr( config.CONF, '{}_image_format'.format(self.case_name), self.image_format), @@ -101,15 +109,21 @@ class VmReady1(tenantnetwork.TenantNetwork1): Raises: expection on error """ assert self.cloud + extra_alt_properties = self.extra_alt_properties.copy() + if env.get('IMAGE_PROPERTIES'): + extra_alt_properties.update( + functest_utils.convert_ini_to_dict( + env.get('IMAGE_PROPERTIES'))) + extra_alt_properties.update( + getattr(config.CONF, '{}_extra_alt_properties'.format( + self.case_name), {})) image = self.cloud.create_image( name if name else '{}-img_alt_{}'.format( self.case_name, self.guid), filename=getattr( config.CONF, '{}_image_alt'.format(self.case_name), self.filename_alt), - meta=getattr( - config.CONF, '{}_extra_properties'.format(self.case_name), - self.extra_properties), + meta=extra_alt_properties, disk_format=getattr( config.CONF, '{}_image_alt_format'.format(self.case_name), self.image_format), @@ -140,11 +154,11 @@ class VmReady1(tenantnetwork.TenantNetwork1): getattr(config.CONF, '{}_flavor_disk'.format(self.case_name), self.flavor_disk)) self.__logger.debug("flavor: %s", flavor) - flavor_extra_specs_updated = self.flavor_extra_specs.copy() - flavor_extra_specs_updated.update( + flavor_extra_specs = self.flavor_extra_specs.copy() + flavor_extra_specs.update( getattr(config.CONF, '{}_flavor_extra_specs'.format(self.case_name), {})) - self.orig_cloud.set_flavor_specs(flavor.id, flavor_extra_specs_updated) + self.orig_cloud.set_flavor_specs(flavor.id, flavor_extra_specs) return flavor def create_flavor_alt(self, name=None): @@ -168,12 +182,12 @@ class VmReady1(tenantnetwork.TenantNetwork1): getattr(config.CONF, '{}_flavor_alt_disk'.format(self.case_name), self.flavor_alt_disk)) self.__logger.debug("flavor: %s", flavor) - flavor_alt_extra_specs_updated = self.flavor_alt_extra_specs.copy() - flavor_alt_extra_specs_updated.update( + flavor_alt_extra_specs = self.flavor_alt_extra_specs.copy() + flavor_alt_extra_specs.update( getattr(config.CONF, '{}_flavor_alt_extra_specs'.format(self.case_name), {})) self.orig_cloud.set_flavor_specs( - flavor.id, flavor_alt_extra_specs_updated) + flavor.id, flavor_alt_extra_specs) return flavor def boot_vm(self, name=None, **kwargs): @@ -252,14 +266,14 @@ class VmReady1(tenantnetwork.TenantNetwork1): if self.flavor: self.orig_cloud.delete_flavor(self.flavor.id) except Exception: # pylint: disable=broad-except - self.__logger.exception("Cannot clean all ressources") + self.__logger.exception("Cannot clean all resources") class VmReady2(VmReady1): """Deploy a single VM reachable via ssh (scenario2) It creates new user/project before creating and configuring all tenant - network ressources, flavors, images, etc. required by advanced testcases. + network resources, flavors, images, etc. required by advanced testcases. It ensures that all testcases inheriting from SingleVm2 could work without specific configurations (or at least read the same config data). @@ -288,7 +302,7 @@ class VmReady2(VmReady1): assert self.project self.project.clean() except Exception: # pylint: disable=broad-except - self.__logger.exception("Cannot clean all ressources") + self.__logger.exception("Cannot clean all resources") class SingleVm1(VmReady1): @@ -444,14 +458,14 @@ class SingleVm1(VmReady1): self.cloud.delete_keypair(self.keypair.name) super(SingleVm1, self).clean() except Exception: # pylint: disable=broad-except - self.__logger.exception("Cannot clean all ressources") + self.__logger.exception("Cannot clean all resources") class SingleVm2(SingleVm1): """Deploy a single VM reachable via ssh (scenario2) It creates new user/project before creating and configuring all tenant - network ressources and vms required by advanced testcases. + network resources and vms required by advanced testcases. It ensures that all testcases inheriting from SingleVm2 could work without specific configurations (or at least read the same config data). @@ -480,4 +494,4 @@ class SingleVm2(SingleVm1): assert self.project self.project.clean() except Exception: # pylint: disable=broad-except - self.__logger.exception("Cannot clean all ressources") + self.__logger.exception("Cannot clean all resources")