X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=utils%2Fopenstack_utils.py;h=80815943b1e72fe3cc1f8c4a5674f6f9a41386e1;hb=refs%2Fchanges%2F67%2F21267%2F1;hp=03279f63d2f314fbe2ff1b8beb35cda68a72a20b;hpb=a88f889ccef43cebe100d8eeba6ec788fe358f21;p=functest.git diff --git a/utils/openstack_utils.py b/utils/openstack_utils.py index 03279f63d..80815943b 100755 --- a/utils/openstack_utils.py +++ b/utils/openstack_utils.py @@ -16,6 +16,7 @@ import time from cinderclient import client as cinderclient import functest.utils.functest_logger as ft_logger +import functest.utils.functest_utils as ft_utils from glanceclient import client as glanceclient from keystoneclient.v2_0 import client as keystoneclient from neutronclient.v2_0 import client as neutronclient @@ -210,6 +211,45 @@ def get_flavor_id_by_ram_range(nova_client, min_ram, max_ram): return id +def create_flavor(nova_client, flavor_name, ram, disk, vcpus): + try: + flavor = nova_client.flavors.create(flavor_name, ram, vcpus, disk) + try: + extra_specs = ft_utils.get_functest_config( + 'general.flavor_extra_specs') + flavor.set_keys(extra_specs) + except ValueError: + # flavor extra specs are not configured, therefore skip the update + pass + + except Exception, e: + logger.error("Error [create_flavor(nova_client, '%s', '%s', '%s', " + "'%s')]: %s" % (flavor_name, ram, disk, vcpus, e)) + return None + return flavor.id + + +def get_or_create_flavor(flavor_name, ram, disk, vcpus): + flavor_exists = False + nova_client = get_nova_client() + + flavor_id = get_flavor_id(nova_client, flavor_name) + if flavor_id != '': + logger.info("Using existing flavor '%s'..." % flavor_name) + flavor_exists = True + else: + logger.info("Creating flavor '%s' with '%s' RAM, '%s' disk size, " + "'%s' vcpus..." % (flavor_name, ram, disk, vcpus)) + flavor_id = create_flavor(nova_client, flavor_name, ram, disk, vcpus) + if not flavor_id: + logger.error("Failed to create flavor '%s'..." % (flavor_name)) + else: + logger.debug("Flavor '%s' with ID=%s created successfully." + % (flavor_name, flavor_id)) + + return flavor_exists, flavor_id + + def get_floating_ips(nova_client): try: floating_ips = nova_client.floating_ips.list() @@ -232,21 +272,6 @@ def get_hypervisors(nova_client): return None -def create_flavor(nova_client, flavor_name, ram, disk, vcpus): - try: - flavor = nova_client.flavors.create(flavor_name, ram, vcpus, disk) - extra_specs = {} - deploy_scenario = os.environ.get('DEPLOY_SCENARIO') - if deploy_scenario is not None and 'fdio' in deploy_scenario: - extra_specs['hw:mem_page_size'] = 'large' - flavor.update(extra_specs) - except Exception, e: - logger.error("Error [create_flavor(nova_client, '%s', '%s', '%s', " - "'%s')]: %s" % (flavor_name, ram, disk, vcpus, e)) - return None - return flavor.id - - def create_instance(flavor_name, image_id, network_id, @@ -364,7 +389,7 @@ def delete_floating_ip(nova_client, floatingip_id): nova_client.floating_ips.delete(floatingip_id) return True except Exception, e: - logger.error("Error [delete_floating_ip(nova_client, '%s')]:" + logger.error("Error [delete_floating_ip(nova_client, '%s')]: %s" % (floatingip_id, e)) return False @@ -907,10 +932,13 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2", if logger: logger.info("Creating image '%s' from '%s'..." % (image_name, file_path)) - properties = {} - deploy_scenario = os.environ.get('DEPLOY_SCENARIO') - if deploy_scenario is not None and 'fdio' in deploy_scenario: - properties['hw_mem_page_size'] = 'large' + try: + properties = ft_utils.get_functest_config( + 'general.image_properties') + except ValueError: + # image properties are not configured + # therefore don't add any properties + properties = {} with open(file_path) as fimage: image = glance_client.images.create(name=image_name, is_public=public,