X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Fcreate_flavor.py;h=ec4c76524fca36067316008fbc9f55e8f974c84e;hb=dcc190a885955b03760458ed637749de1dfd3554;hp=68a7080d2518e6eb8fa69f4a7fc3b95ac191ee42;hpb=1a0967b4e23c2d985b8c02dc9f23bd6c3afa86a3;p=snaps.git diff --git a/snaps/openstack/create_flavor.py b/snaps/openstack/create_flavor.py index 68a7080..ec4c765 100644 --- a/snaps/openstack/create_flavor.py +++ b/snaps/openstack/create_flavor.py @@ -20,9 +20,10 @@ from snaps.openstack.utils import nova_utils __author__ = 'spisarski' -logger = logging.getLogger('create_image') +logger = logging.getLogger('create_flavor') -DEFAULT_METADATA = {'hw:mem_page_size': 'any'} +MEM_PAGE_SIZE_ANY = {'hw:mem_page_size': 'any'} +MEM_PAGE_SIZE_LARGE = {'hw:mem_page_size': 'large'} class OpenStackFlavor: @@ -40,22 +41,27 @@ class OpenStackFlavor: self.__os_creds = os_creds self.flavor_settings = flavor_settings self.__flavor = None - self.__nova = nova_utils.nova_client(self.__os_creds) + self.__nova = None def create(self, cleanup=False): """ 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 + :param cleanup: Denotes whether or not this is being called for cleanup + or not :return: The OpenStack flavor object """ - self.__flavor = nova_utils.get_flavor_by_name(self.__nova, self.flavor_settings.name) + self.__nova = nova_utils.nova_client(self.__os_creds) + self.__flavor = nova_utils.get_flavor_by_name( + self.__nova, self.flavor_settings.name) if self.__flavor: - logger.info('Found flavor with name - ' + self.flavor_settings.name) + logger.info( + 'Found flavor with name - ' + self.flavor_settings.name) elif not cleanup: - self.__flavor = nova_utils.create_flavor(self.__nova, self.flavor_settings) + self.__flavor = nova_utils.create_flavor( + 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) + nova_utils.set_flavor_keys(self.__nova, self.__flavor, + self.flavor_settings.metadata) else: logger.info('Did not create flavor due to cleanup mode') @@ -87,12 +93,12 @@ class FlavorSettings: Configuration settings for OpenStack flavor creation """ - def __init__(self, config=None, name=None, flavor_id='auto', ram=None, disk=None, vcpus=None, ephemeral=0, swap=0, - rxtx_factor=1.0, is_public=True, metadata=DEFAULT_METADATA): + 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 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) @@ -100,80 +106,79 @@ class FlavorSettings: :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 (default hw:mem_page_size=any) + :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 config: - self.name = config.get('name') - - if config.get('flavor_id'): - self.flavor_id = config['flavor_id'] - else: - self.flavor_id = flavor_id - - self.ram = config.get('ram') - self.disk = config.get('disk') - self.vcpus = config.get('vcpus') - - if config.get('ephemeral'): - self.ephemeral = config['ephemeral'] - else: - self.ephemeral = ephemeral - - if config.get('swap'): - self.swap = config['swap'] - else: - self.swap = swap - - if config.get('rxtx_factor'): - self.rxtx_factor = config['rxtx_factor'] - else: - self.rxtx_factor = rxtx_factor - - if config.get('is_public') is not None: - self.is_public = config['is_public'] - else: - self.is_public = is_public - - if config.get('metadata'): - self.metadata = config['metadata'] - else: - self.metadata = metadata + if kwargs.get('rxtx_factor'): + self.rxtx_factor = kwargs['rxtx_factor'] else: - self.name = name - self.flavor_id = flavor_id - self.ram = ram - self.disk = disk - self.vcpus = vcpus - self.ephemeral = ephemeral - self.swap = swap - self.rxtx_factor = rxtx_factor - self.is_public = is_public - self.metadata = metadata + 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') + raise FlavorSettingsError( + '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') + raise FlavorSettingsError('The ram attribute must be a integer') if not isinstance(self.disk, int): - raise Exception('The ram attribute must be a integer') + raise FlavorSettingsError('The ram attribute must be a integer') if not isinstance(self.vcpus, int): - raise Exception('The vcpus attribute must be a integer') + raise FlavorSettingsError('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') + raise FlavorSettingsError( + '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') + raise FlavorSettingsError('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') + raise FlavorSettingsError( + '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') + raise FlavorSettingsError( + 'The is_public attribute must be a boolean') + + +class FlavorSettingsError(Exception): + """ + Exception to be thrown when an flavor settings are incorrect + """