Merge "Enhance variable manipulation in rally"
[functest.git] / functest / utils / openstack_utils.py
index 73d1cde..b779997 100644 (file)
@@ -10,7 +10,6 @@
 
 import logging
 import os.path
-import re
 import sys
 import time
 
@@ -115,62 +114,6 @@ def get_credentials(other_creds={}):
     return creds
 
 
-def source_credentials(rc_file):
-    with open(rc_file, "r") as f:
-        for line in f:
-            var = (line.rstrip('"\n').replace('export ', '').split("=")
-                   if re.search(r'(.*)=(.*)', line) else None)
-            # The two next lines should be modified as soon as rc_file
-            # conforms with common rules. Be aware that it could induce
-            # issues if value starts with '
-            if var:
-                key = re.sub(r'^["\' ]*|[ \'"]*$', '', var[0])
-                value = re.sub(r'^["\' ]*|[ \'"]*$', '', "".join(var[1:]))
-                os.environ[key] = value
-
-
-def get_credentials_for_rally():
-    creds = get_credentials()
-    env_cred_dict = get_env_cred_dict()
-    rally_conf = {"type": "ExistingCloud", "admin": {}}
-    for key in creds:
-        if key == 'auth_url':
-            rally_conf[key] = creds[key]
-        else:
-            rally_conf['admin'][key] = creds[key]
-
-    endpoint_types = [('internalURL', 'internal'),
-                      ('publicURL', 'public'), ('adminURL', 'admin')]
-
-    endpoint_type = get_endpoint_type_from_env()
-    if endpoint_type is not None:
-        cred_key = env_cred_dict.get('OS_ENDPOINT_TYPE')
-        for k, v in endpoint_types:
-            if endpoint_type == v:
-                rally_conf[cred_key] = v
-
-    region_name = os.getenv('OS_REGION_NAME')
-    if region_name is not None:
-        cred_key = env_cred_dict.get('OS_REGION_NAME')
-        rally_conf[cred_key] = region_name
-
-    cred_key = env_cred_dict.get('OS_CACERT')
-    rally_conf[cred_key] = os.getenv('OS_CACERT', '')
-
-    insecure_key = env_cred_dict.get('OS_INSECURE')
-    rally_conf[insecure_key] = os.getenv('OS_INSECURE', '').lower() == 'true'
-
-    return rally_conf
-
-
-def get_endpoint_type_from_env():
-    endpoint_type = os.environ.get("OS_ENDPOINT_TYPE",
-                                   os.environ.get("OS_INTERFACE"))
-    if endpoint_type and "URL" in endpoint_type:
-        endpoint_type = endpoint_type.replace("URL", "")
-    return endpoint_type
-
-
 def get_session_auth(other_creds={}):
     loader = loading.get_plugin_loader('password')
     creds = get_credentials(other_creds)
@@ -560,7 +503,10 @@ def create_instance_and_wait_for_active(flavor_name,
     count = VM_BOOT_TIMEOUT / SLEEP
     for n in range(count, -1, -1):
         status = get_instance_status(nova_client, instance)
-        if status.lower() == "active":
+        if status is None:
+            time.sleep(SLEEP)
+            continue
+        elif status.lower() == "active":
             return instance
         elif status.lower() == "error":
             logger.error("The instance %s went to ERROR status."
@@ -1195,8 +1141,13 @@ def get_image_id(glance_client, image_name):
     return id
 
 
-def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
-                        container="bare", public="public"):
+def create_glance_image(glance_client,
+                        image_name,
+                        file_path,
+                        disk="qcow2",
+                        extra_properties={},
+                        container="bare",
+                        public="public"):
     if not os.path.isfile(file_path):
         logger.error("Error: file %s does not exist." % file_path)
         return None
@@ -1211,7 +1162,8 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
             image = glance_client.images.create(name=image_name,
                                                 visibility=public,
                                                 disk_format=disk,
-                                                container_format=container)
+                                                container_format=container,
+                                                **extra_properties)
             image_id = image.id
             with open(file_path) as image_data:
                 glance_client.images.upload(image_id, image_data)
@@ -1222,7 +1174,7 @@ def create_glance_image(glance_client, image_name, file_path, disk="qcow2",
         return None
 
 
-def get_or_create_image(name, path, format):
+def get_or_create_image(name, path, format, extra_properties):
     image_exists = False
     glance_client = get_glance_client()
 
@@ -1232,7 +1184,11 @@ def get_or_create_image(name, path, format):
         image_exists = True
     else:
         logger.info("Creating image '%s' from '%s'..." % (name, path))
-        image_id = create_glance_image(glance_client, name, path, format)
+        image_id = create_glance_image(glance_client,
+                                       name,
+                                       path,
+                                       format,
+                                       extra_properties)
         if not image_id:
             logger.error("Failed to create a Glance image...")
         else:
@@ -1264,29 +1220,6 @@ def get_volumes(cinder_client):
         return None
 
 
-def list_volume_types(cinder_client, public=True, private=True):
-    try:
-        volume_types = cinder_client.volume_types.list()
-        if not public:
-            volume_types = [vt for vt in volume_types if not vt.is_public]
-        if not private:
-            volume_types = [vt for vt in volume_types if vt.is_public]
-        return volume_types
-    except Exception as e:
-        logger.error("Error [list_volume_types(cinder_client)]: %s" % e)
-        return None
-
-
-def create_volume_type(cinder_client, name):
-    try:
-        volume_type = cinder_client.volume_types.create(name)
-        return volume_type
-    except Exception as e:
-        logger.error("Error [create_volume_type(cinder_client, '%s')]: %s"
-                     % (name, e))
-        return None
-
-
 def update_cinder_quota(cinder_client, tenant_id, vols_quota,
                         snapshots_quota, gigabytes_quota):
     quotas_values = {"volumes": vols_quota,
@@ -1320,16 +1253,6 @@ def delete_volume(cinder_client, volume_id, forced=False):
         return False
 
 
-def delete_volume_type(cinder_client, volume_type):
-    try:
-        cinder_client.volume_types.delete(volume_type)
-        return True
-    except Exception as e:
-        logger.error("Error [delete_volume_type(cinder_client, '%s')]: %s"
-                     % (volume_type, e))
-        return False
-
-
 # *********************************************
 #   KEYSTONE
 # *********************************************
@@ -1397,7 +1320,7 @@ def get_domain_id(keystone_client, domain_name):
 def create_tenant(keystone_client, tenant_name, tenant_description):
     try:
         if is_keystone_v3():
-            domain_name = CONST.__getattribute__('OS_PROJECT_DOMAIN_NAME')
+            domain_name = os.environ['OS_PROJECT_DOMAIN_NAME']
             domain_id = get_domain_id(keystone_client, domain_name)
             tenant = keystone_client.projects.create(
                 name=tenant_name,
@@ -1561,62 +1484,3 @@ def get_resource(heat_client, stack_id, resource):
     except Exception as e:
         logger.error("Error [get_resource]: %s" % e)
         return None
-
-
-# *********************************************
-#   TEMPEST
-# *********************************************
-def init_tempest_cleanup(tempest_config_dir=None,
-                         tempest_config_filename='tempest.conf',
-                         output_file=None):
-    """
-    Initialize the Tempest Cleanup utility.
-    See  https://docs.openstack.org/tempest/latest/cleanup.html for docs.
-
-    :param tempest_config_dir: The directory where the Tempest config file is
-            located. If not specified, we let Tempest pick both the directory
-            and the filename (i.e. second parameter is ignored)
-    :param tempest_config_filename: The filename of the Tempest config file
-    :param output_file: Optional file where to save output
-    """
-    # The Tempest cleanup utility currently offers no cmd argument to specify
-    # the config file, therefore it has to be configured with env variables
-    env = None
-    if tempest_config_dir:
-        env = os.environ.copy()
-        env['TEMPEST_CONFIG_DIR'] = tempest_config_dir
-        env['TEMPEST_CONFIG'] = tempest_config_filename
-
-    # If this command fails, an exception must be raised to stop the script
-    # otherwise the later cleanup would destroy also other resources
-    cmd_line = "tempest cleanup --init-saved-state"
-    ft_utils.execute_command_raise(cmd_line, env=env, output_file=output_file,
-                                   error_msg="Tempest cleanup init failed")
-
-
-def perform_tempest_cleanup(tempest_config_dir=None,
-                            tempest_config_filename='tempest.conf',
-                            output_file=None):
-    """
-    Perform cleanup using the Tempest Cleanup utility.
-    See  https://docs.openstack.org/tempest/latest/cleanup.html for docs.
-
-    :param tempest_config_dir: The directory where the Tempest config file is
-            located. If not specified, we let Tempest pick both the directory
-            and the filename (i.e. second parameter is ignored)
-    :param tempest_config_filename: The filename of the Tempest config file
-    :param output_file: Optional file where to save output
-    """
-    # The Tempest cleanup utility currently offers no cmd argument to specify
-    # the config file, therefore it has to be configured with env variables
-    env = None
-    if tempest_config_dir:
-        env = os.environ.copy()
-        env['TEMPEST_CONFIG_DIR'] = tempest_config_dir
-        env['TEMPEST_CONFIG'] = tempest_config_filename
-
-    # If this command fails, an exception must be raised to stop the script
-    # otherwise the later cleanup would destroy also other resources
-    cmd_line = "tempest cleanup"
-    ft_utils.execute_command(cmd_line, env=env, output_file=output_file,
-                             error_msg="Tempest cleanup failed")