Update the logic to support both Newton and Mitaka
authorhelenyao <yaohelan@huawei.com>
Thu, 8 Dec 2016 09:36:55 +0000 (04:36 -0500)
committerhelenyao <yaohelan@huawei.com>
Thu, 8 Dec 2016 09:36:55 +0000 (04:36 -0500)
JIRA: FUNCTEST-645

RC file is quite different between Newton and Mitaka.
The change is to support both version.

Change-Id: I846e8bc4b4c8b7caf4bcb26c8453e1fc5d1cc0f4
Signed-off-by: helenyao <yaohelan@huawei.com>
functest/utils/openstack_utils.py

index df6fb5d..10aaf50 100755 (executable)
@@ -56,8 +56,19 @@ def get_credentials(service):
     """
     creds = {}
 
+    keystone_api_version = os.getenv('OS_IDENTITY_API_VERSION')
+    if (keystone_api_version is None or
+            keystone_api_version == '2'):
+        keystone_v3 = False
+        tenant_env = 'OS_TENANT_NAME'
+        tenant = 'tenant_name'
+    else:
+        keystone_v3 = True
+        tenant_env = 'OS_PROJECT_NAME'
+        tenant = 'project_name'
+
     # Check that the env vars exists:
-    envvars = ('OS_USERNAME', 'OS_PASSWORD', 'OS_AUTH_URL', 'OS_TENANT_NAME')
+    envvars = ('OS_USERNAME', 'OS_PASSWORD', 'OS_AUTH_URL', tenant_env)
     for envvar in envvars:
         if os.getenv(envvar) is None:
             raise MissingEnvVar(envvar)
@@ -69,7 +80,6 @@ def get_credentials(service):
         tenant = "project_id"
     else:
         password = "password"
-        tenant = "tenant_name"
 
     # The most common way to pass these info to the script is to do it through
     # environment variables.
@@ -77,8 +87,18 @@ def get_credentials(service):
         "username": os.environ.get("OS_USERNAME"),
         password: os.environ.get("OS_PASSWORD"),
         "auth_url": os.environ.get("OS_AUTH_URL"),
-        tenant: os.environ.get("OS_TENANT_NAME")
+        tenant: os.environ.get(tenant_env)
     })
+    if keystone_v3:
+        if os.getenv('OS_USER_DOMAIN_NAME') is not None:
+            creds.update({
+                "user_domain_name": os.getenv('OS_USER_DOMAIN_NAME')
+            })
+        if os.getenv('OS_PROJECT_DOMAIN_NAME') is not None:
+            creds.update({
+                "project_domain_name": os.getenv('OS_PROJECT_DOMAIN_NAME')
+            })
+
     if os.getenv('OS_ENDPOINT_TYPE') is not None:
         creds.update({
             "endpoint_type": os.environ.get("OS_ENDPOINT_TYPE")