diff options
Diffstat (limited to 'snaps/config/flavor.py')
-rw-r--r-- | snaps/config/flavor.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/snaps/config/flavor.py b/snaps/config/flavor.py new file mode 100644 index 0000000..b29fb7c --- /dev/null +++ b/snaps/config/flavor.py @@ -0,0 +1,107 @@ +# Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs") +# and others. All rights reserved. +# +# Licensed 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. + + +class FlavorConfig(object): + """ + Configuration settings for OpenStack flavor creation + """ + + def __init__(self, **kwargs): + """ + Constructor + :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 FlavorConfigError( + 'The attributes name, ram, disk, and vcpus are required for' + 'FlavorConfig') + + if not isinstance(self.ram, int): + raise FlavorConfigError('The ram attribute must be a integer') + + if not isinstance(self.disk, int): + raise FlavorConfigError('The ram attribute must be a integer') + + if not isinstance(self.vcpus, int): + raise FlavorConfigError('The vcpus attribute must be a integer') + + if self.ephemeral and not isinstance(self.ephemeral, int): + raise FlavorConfigError( + 'The ephemeral attribute must be an integer') + + if self.swap and not isinstance(self.swap, int): + raise FlavorConfigError('The swap attribute must be an integer') + + if self.rxtx_factor and not isinstance(self.rxtx_factor, (int, float)): + raise FlavorConfigError( + 'The is_public attribute must be an integer or float') + + if self.is_public and not isinstance(self.is_public, bool): + raise FlavorConfigError( + 'The is_public attribute must be a boolean') + + +class FlavorConfigError(Exception): + """ + Exception to be thrown when a flavor configuration is incorrect + """ |