summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-02-17 09:21:59 -0700
committerspisarski <s.pisarski@cablelabs.com>2017-02-17 09:21:59 -0700
commit868cd220974347b25a1fb5773de9e7c36f6e1203 (patch)
treeee3f2315e1bcd1f889910d9b82deef28aec8a88d
parent57777f3df521553a06cd01a3861b415d2905ceca (diff)
Added the ability to add in configurable metadata to flavor creation.
In order to properly support standard and DPDK installations, the default metadata value is hw:mem_page_size=any. JIRA: SNAPS-28 JIRA: FUNCTEST-737 Change-Id: Ic882e8f85a97320d65ede3d6a00735a909a4ead2 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--snaps/openstack/create_flavor.py14
-rw-r--r--snaps/openstack/tests/create_flavor_tests.py16
2 files changed, 25 insertions, 5 deletions
diff --git a/snaps/openstack/create_flavor.py b/snaps/openstack/create_flavor.py
index 60a87cd..68a7080 100644
--- a/snaps/openstack/create_flavor.py
+++ b/snaps/openstack/create_flavor.py
@@ -22,6 +22,8 @@ __author__ = 'spisarski'
logger = logging.getLogger('create_image')
+DEFAULT_METADATA = {'hw:mem_page_size': 'any'}
+
class OpenStackFlavor:
"""
@@ -51,6 +53,9 @@ class OpenStackFlavor:
logger.info('Found flavor with name - ' + self.flavor_settings.name)
elif not cleanup:
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)
else:
logger.info('Did not create flavor due to cleanup mode')
@@ -83,7 +88,7 @@ class FlavorSettings:
"""
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):
+ rxtx_factor=1.0, is_public=True, metadata=DEFAULT_METADATA):
"""
Constructor
:param config: dict() object containing the configuration settings using the attribute names below as each
@@ -98,6 +103,7 @@ class FlavorSettings:
: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)
"""
if config:
@@ -131,6 +137,11 @@ class FlavorSettings:
self.is_public = config['is_public']
else:
self.is_public = is_public
+
+ if config.get('metadata'):
+ self.metadata = config['metadata']
+ else:
+ self.metadata = metadata
else:
self.name = name
self.flavor_id = flavor_id
@@ -141,6 +152,7 @@ class FlavorSettings:
self.swap = swap
self.rxtx_factor = rxtx_factor
self.is_public = is_public
+ self.metadata = metadata
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')
diff --git a/snaps/openstack/tests/create_flavor_tests.py b/snaps/openstack/tests/create_flavor_tests.py
index c75bdf6..7660665 100644
--- a/snaps/openstack/tests/create_flavor_tests.py
+++ b/snaps/openstack/tests/create_flavor_tests.py
@@ -10,6 +10,7 @@
import uuid
import unittest
+from snaps.openstack import create_flavor
from snaps.openstack.create_flavor import FlavorSettings, OpenStackFlavor
from snaps.openstack.tests.os_source_file_test import OSComponentTestCase
from snaps.openstack.utils import nova_utils
@@ -169,6 +170,7 @@ class FlavorSettingsUnitTests(unittest.TestCase):
self.assertEquals(0, settings.swap)
self.assertEquals(1.0, settings.rxtx_factor)
self.assertEquals(True, settings.is_public)
+ self.assertEquals(create_flavor.DEFAULT_METADATA, settings.metadata)
def test_config_with_name_ram_disk_vcpus_only(self):
settings = FlavorSettings(config={'name': 'foo', 'ram': 1, 'disk': 2, 'vcpus': 3})
@@ -181,10 +183,12 @@ class FlavorSettingsUnitTests(unittest.TestCase):
self.assertEquals(0, settings.swap)
self.assertEquals(1.0, settings.rxtx_factor)
self.assertEquals(True, settings.is_public)
+ self.assertEquals(create_flavor.DEFAULT_METADATA, settings.metadata)
def test_all(self):
- settings = FlavorSettings(name='foo', flavor_id='bar', ram=1, disk=2, vcpus=3, ephemeral=4, swap=5, rxtx_factor=6.0,
- is_public=False)
+ metadata = {'foo': 'bar'}
+ settings = FlavorSettings(name='foo', flavor_id='bar', ram=1, disk=2, vcpus=3, ephemeral=4, swap=5,
+ rxtx_factor=6.0, is_public=False, metadata=metadata)
self.assertEquals('foo', settings.name)
self.assertEquals('bar', settings.flavor_id)
self.assertEquals(1, settings.ram)
@@ -194,10 +198,13 @@ class FlavorSettingsUnitTests(unittest.TestCase):
self.assertEquals(5, settings.swap)
self.assertEquals(6.0, settings.rxtx_factor)
self.assertEquals(False, settings.is_public)
+ self.assertEquals(metadata, settings.metadata)
def test_config_all(self):
- settings = FlavorSettings(config={'name': 'foo', 'flavor_id': 'bar', 'ram': 1, 'disk': 2, 'vcpus': 3, 'ephemeral': 4,
- 'swap': 5, 'rxtx_factor': 6.0, 'is_public': False})
+ metadata = {'foo': 'bar'}
+ settings = FlavorSettings(config={'name': 'foo', 'flavor_id': 'bar', 'ram': 1, 'disk': 2, 'vcpus': 3,
+ 'ephemeral': 4, 'swap': 5, 'rxtx_factor': 6.0, 'is_public': False,
+ 'metadata': metadata})
self.assertEquals('foo', settings.name)
self.assertEquals('bar', settings.flavor_id)
self.assertEquals(1, settings.ram)
@@ -207,6 +214,7 @@ class FlavorSettingsUnitTests(unittest.TestCase):
self.assertEquals(5, settings.swap)
self.assertEquals(6.0, settings.rxtx_factor)
self.assertEquals(False, settings.is_public)
+ self.assertEquals(metadata, settings.metadata)
class CreateFlavorTests(OSComponentTestCase):