X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Fcreate_flavor.py;h=48b3e7ca8157e29ef837c561a21cf382424bbcd7;hb=d9f602981b0e695504061ba7a9862ec53082b82a;hp=f1c7ee3f45f4d152cb1135cbe81ac0ed2ad5eabb;hpb=43512a64f87dacdb43fd03e58a210d10fb0e5da7;p=snaps.git diff --git a/snaps/openstack/create_flavor.py b/snaps/openstack/create_flavor.py index f1c7ee3..48b3e7c 100644 --- a/snaps/openstack/create_flavor.py +++ b/snaps/openstack/create_flavor.py @@ -16,17 +16,19 @@ import logging from novaclient.exceptions import NotFound +from snaps.config.flavor import FlavorConfig +from snaps.openstack.openstack_creator import OpenStackComputeObject from snaps.openstack.utils import nova_utils __author__ = 'spisarski' -logger = logging.getLogger('create_image') +logger = logging.getLogger('create_flavor') MEM_PAGE_SIZE_ANY = {'hw:mem_page_size': 'any'} MEM_PAGE_SIZE_LARGE = {'hw:mem_page_size': 'large'} -class OpenStackFlavor: +class OpenStackFlavor(OpenStackComputeObject): """ Class responsible for creating a user in OpenStack """ @@ -35,36 +37,40 @@ class OpenStackFlavor: """ Constructor :param os_creds: The OpenStack connection credentials - :param flavor_settings: The flavor settings + :param flavor_settings: a FlavorConfig instance :return: """ - self.__os_creds = os_creds + super(self.__class__, self).__init__(os_creds) + self.flavor_settings = flavor_settings self.__flavor = None - self.__nova = None - def create(self, cleanup=False): + def initialize(self): """ - Creates the image in OpenStack if it does not already exist - :param cleanup: Denotes whether or not this is being called for cleanup - or not - :return: The OpenStack flavor object + Loads the existing OpenStack flavor + :return: The Flavor domain object or None """ - self.__nova = nova_utils.nova_client(self.__os_creds) + super(self.__class__, self).initialize() + self.__flavor = nova_utils.get_flavor_by_name( - self.__nova, self.flavor_settings.name) + self._nova, self.flavor_settings.name) if self.__flavor: - logger.info( - 'Found flavor with name - ' + self.flavor_settings.name) - elif not cleanup: + logger.info('Found flavor with name - %s', + self.flavor_settings.name) + return self.__flavor + + def create(self): + """ + Creates the image in OpenStack if it does not already exist + :return: The OpenStack flavor object + """ + self.initialize() + if not self.__flavor: self.__flavor = nova_utils.create_flavor( - self.__nova, self.flavor_settings) + self._nova, self.flavor_settings) if self.flavor_settings.metadata: - self.__flavor.set_keys(self.flavor_settings.metadata) - self.__flavor = nova_utils.get_flavor_by_name( - self.__nova, self.flavor_settings.name) - else: - logger.info('Did not create flavor due to cleanup mode') + nova_utils.set_flavor_keys(self._nova, self.__flavor, + self.flavor_settings.metadata) return self.__flavor @@ -75,12 +81,14 @@ class OpenStackFlavor: """ if self.__flavor: try: - nova_utils.delete_flavor(self.__nova, self.__flavor) + nova_utils.delete_flavor(self._nova, self.__flavor) except NotFound: pass self.__flavor = None + super(self.__class__, self).clean() + def get_flavor(self): """ Returns the OpenStack flavor object @@ -89,89 +97,13 @@ class OpenStackFlavor: return self.__flavor -class FlavorSettings: +class FlavorSettings(FlavorConfig): """ Configuration settings for OpenStack flavor creation """ def __init__(self, **kwargs): - """ - Constructor - :param config: dict() object containing the configuration settings - using the attribute names below as each member's the - key and overrides any of the other parameters. - :param name: the flavor's name (required) - :param flavor_id: the string ID (default 'auto') - :param ram: the required RAM in MB (required) - :param disk: the size of the root disk in GB (required) - :param vcpus: the number of virtual CPUs (required) - :param ephemeral: the size of the ephemeral disk in GB (default 0) - :param swap: the size of the dedicated swap disk in GB (default 0) - :param rxtx_factor: the receive/transmit factor to be set on ports if - backend supports QoS extension (default 1.0) - :param is_public: denotes whether or not the flavor is public - (default True) - :param metadata: freeform dict() for special metadata - """ - self.name = kwargs.get('name') - - if kwargs.get('flavor_id'): - self.flavor_id = kwargs['flavor_id'] - else: - self.flavor_id = 'auto' - - self.ram = kwargs.get('ram') - self.disk = kwargs.get('disk') - self.vcpus = kwargs.get('vcpus') - - if kwargs.get('ephemeral'): - self.ephemeral = kwargs['ephemeral'] - else: - self.ephemeral = 0 - - if kwargs.get('swap'): - self.swap = kwargs['swap'] - else: - self.swap = 0 - - if kwargs.get('rxtx_factor'): - self.rxtx_factor = kwargs['rxtx_factor'] - else: - self.rxtx_factor = 1.0 - - if kwargs.get('is_public') is not None: - self.is_public = kwargs['is_public'] - else: - self.is_public = True - - if kwargs.get('metadata'): - self.metadata = kwargs['metadata'] - else: - self.metadata = None - - if not self.name or not self.ram or not self.disk or not self.vcpus: - raise Exception( - 'The attributes name, ram, disk, and vcpus are required for' - 'FlavorSettings') - - if not isinstance(self.ram, int): - raise Exception('The ram attribute must be a integer') - - if not isinstance(self.disk, int): - raise Exception('The ram attribute must be a integer') - - if not isinstance(self.vcpus, int): - raise Exception('The vcpus attribute must be a integer') - - if self.ephemeral and not isinstance(self.ephemeral, int): - raise Exception('The ephemeral attribute must be an integer') - - if self.swap and not isinstance(self.swap, int): - raise Exception('The swap attribute must be an integer') - - if self.rxtx_factor and not isinstance(self.rxtx_factor, (int, float)): - raise Exception( - 'The is_public attribute must be an integer or float') - - if self.is_public and not isinstance(self.is_public, bool): - raise Exception('The is_public attribute must be a boolean') + from warnings import warn + warn('Use snaps.config.flavor.FlavorConfig instead', + DeprecationWarning) + super(self.__class__, self).__init__(**kwargs)