From 868cd220974347b25a1fb5773de9e7c36f6e1203 Mon Sep 17 00:00:00 2001 From: spisarski Date: Fri, 17 Feb 2017 09:21:59 -0700 Subject: 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 --- snaps/openstack/create_flavor.py | 14 +++++++++++++- snaps/openstack/tests/create_flavor_tests.py | 16 ++++++++++++---- 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): -- cgit 1.2.3-korg