X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Fcreate_flavor.py;h=1479bb0035664516a85cf167fcb79ca5b3fcd126;hb=9fa64ef86316036a40f742b92bbe6a3ca1d490fb;hp=f1c7ee3f45f4d152cb1135cbe81ac0ed2ad5eabb;hpb=d58e9782079ef4ca36e9e7990726102510f4081d;p=snaps.git diff --git a/snaps/openstack/create_flavor.py b/snaps/openstack/create_flavor.py index f1c7ee3..1479bb0 100644 --- a/snaps/openstack/create_flavor.py +++ b/snaps/openstack/create_flavor.py @@ -16,17 +16,18 @@ import logging from novaclient.exceptions import NotFound +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 """ @@ -38,31 +39,37 @@ class OpenStackFlavor: :param flavor_settings: The flavor settings :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) + nova_utils.set_flavor_keys(self._nova, self.__flavor, + self.flavor_settings.metadata) else: logger.info('Did not create flavor due to cleanup mode') @@ -75,7 +82,7 @@ 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 @@ -150,28 +157,36 @@ class FlavorSettings: self.metadata = None if not self.name or not self.ram or not self.disk or not self.vcpus: - raise Exception( + 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( + 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 + """