summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/utils
diff options
context:
space:
mode:
authorLinda Wang <wangwulin@huawei.com>2017-08-02 02:41:15 +0000
committerLinda Wang <wangwulin@huawei.com>2017-08-03 02:20:50 +0000
commita4f8adbb935737122b4800efbb19b9d9b75c7e01 (patch)
tree3531fe4394cfdb0821dae356e06b22a007b299ab /snaps/openstack/utils
parent13e17646bccbcafbac13b144e24eee14125d33e3 (diff)
Add domain name when creating projects and users
(spisarski) Also clarified the difference between domain ID and name Added helper methods and domain object for Domains JIRA: FUNCTEST-858 Change-Id: Iccd7eef56713a4ad0c23232073f52bc71168bf5c Signed-off-by: Linda Wang <wangwulin@huawei.com>
Diffstat (limited to 'snaps/openstack/utils')
-rw-r--r--snaps/openstack/utils/keystone_utils.py46
-rw-r--r--snaps/openstack/utils/tests/keystone_utils_tests.py22
2 files changed, 55 insertions, 13 deletions
diff --git a/snaps/openstack/utils/keystone_utils.py b/snaps/openstack/utils/keystone_utils.py
index 99779ee..10ad68a 100644
--- a/snaps/openstack/utils/keystone_utils.py
+++ b/snaps/openstack/utils/keystone_utils.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs")
+# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
# and others. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,7 @@ from keystoneauth1.identity import v3, v2
from keystoneauth1 import session
import requests
-from snaps.domain.project import Project
+from snaps.domain.project import Project, Domain
from snaps.domain.role import Role
from snaps.domain.user import User
@@ -129,7 +129,7 @@ def get_project(keystone=None, os_creds=None, project_settings=None,
elif project_settings:
proj_filter['name'] = project_settings.name
proj_filter['description'] = project_settings.description
- proj_filter['domain'] = project_settings.domain
+ proj_filter['domain_name'] = project_settings.domain_name
proj_filter['enabled'] = project_settings.enabled
if keystone.version == V2_VERSION_STR:
@@ -161,8 +161,12 @@ def create_project(keystone, project_settings):
project_settings.name, project_settings.description,
project_settings.enabled)
else:
+ os_domain = __get_os_domain_by_name(
+ keystone, project_settings.domain_name)
+ if not os_domain:
+ os_domain = project_settings.domain_name
os_project = keystone.projects.create(
- project_settings.name, project_settings.domain,
+ project_settings.name, os_domain,
description=project_settings.description,
enabled=project_settings.enabled)
domain_id = os_project.domain_id
@@ -238,18 +242,21 @@ def create_user(keystone, user_settings):
email=user_settings.email, tenant_id=project_id,
enabled=user_settings.enabled)
else:
+ os_domain = __get_os_domain_by_name(
+ keystone, user_settings.domain_name)
+ if not os_domain:
+ os_domain = user_settings.domain_name
os_user = keystone.users.create(
name=user_settings.name, password=user_settings.password,
email=user_settings.email, project=project,
- domain=user_settings.domain_name, enabled=user_settings.enabled)
+ domain=os_domain, enabled=user_settings.enabled)
for role_name, role_project in user_settings.roles.items():
os_role = get_role_by_name(keystone, role_name)
os_project = get_project(keystone=keystone, project_name=role_project)
if os_role and os_project:
- existing_roles = get_roles_by_user(keystone, os_user,
- os_project)
+ existing_roles = get_roles_by_user(keystone, os_user, os_project)
found = False
for role in existing_roles:
if role.id == os_role.id:
@@ -355,6 +362,31 @@ def grant_user_role_to_project(keystone, role, user, project):
keystone.roles.grant(os_role, user=user, project=project)
+def get_domain_by_id(keystone, domain_id):
+ """
+ Returns the first OpenStack domain with the given name else None
+ :param keystone: the Keystone client
+ :param domain_id: the domain ID to retrieve
+ :return: the SNAPS-OO Domain domain object
+ """
+ domain = keystone.domains.get(domain_id)
+ if domain:
+ return Domain(name=domain.name, domain_id=domain.id)
+
+
+def __get_os_domain_by_name(keystone, domain_name):
+ """
+ Returns the first OpenStack domain with the given name else None
+ :param keystone: the Keystone client
+ :param domain_name: the domain name to lookup
+ :return: the OpenStack domain object
+ """
+ domains = keystone.domains.list(name=domain_name)
+ for domain in domains:
+ if domain.name == domain_name:
+ return domain
+
+
class KeystoneException(Exception):
"""
Exception when calls to the Keystone client cannot be served properly
diff --git a/snaps/openstack/utils/tests/keystone_utils_tests.py b/snaps/openstack/utils/tests/keystone_utils_tests.py
index 3aa275d..a46cbd1 100644
--- a/snaps/openstack/utils/tests/keystone_utils_tests.py
+++ b/snaps/openstack/utils/tests/keystone_utils_tests.py
@@ -85,8 +85,10 @@ class KeystoneUtilsTests(OSComponentTestCase):
"""
Tests the keystone_utils.create_user() function
"""
- user_settings = UserSettings(name=self.username,
- password=str(uuid.uuid4()))
+ user_settings = UserSettings(
+ name=self.username,
+ password=str(uuid.uuid4()),
+ domain_name=self.os_creds.user_domain_name)
self.user = keystone_utils.create_user(self.keystone, user_settings)
self.assertEqual(self.username, self.user.name)
@@ -98,7 +100,8 @@ class KeystoneUtilsTests(OSComponentTestCase):
"""
Tests the keyston_utils.create_project() funtion
"""
- project_settings = ProjectSettings(name=self.project_name)
+ project_settings = ProjectSettings(
+ name=self.project_name, domain=self.os_creds.project_domain_name)
self.project = keystone_utils.create_project(self.keystone,
project_settings)
self.assertEqual(self.project_name, self.project.name)
@@ -108,6 +111,11 @@ class KeystoneUtilsTests(OSComponentTestCase):
self.assertIsNotNone(project)
self.assertEqual(self.project_name, self.project.name)
+ domain = keystone_utils.get_domain_by_id(
+ self.keystone, project.domain_id)
+ self.assertIsNotNone(domain)
+ self.assertEqual(domain.id, project.domain_id)
+
def test_get_endpoint_success(self):
"""
Tests to ensure that proper credentials and proper service type can
@@ -161,12 +169,14 @@ class KeystoneUtilsTests(OSComponentTestCase):
Tests the keystone_utils function grant_user_role_to_project()
:return:
"""
- user_settings = UserSettings(name=self.username,
- password=str(uuid.uuid4()))
+ user_settings = UserSettings(
+ name=self.username, password=str(uuid.uuid4()),
+ domain_name=self.os_creds.user_domain_name)
self.user = keystone_utils.create_user(self.keystone, user_settings)
self.assertEqual(self.username, self.user.name)
- project_settings = ProjectSettings(name=self.project_name)
+ project_settings = ProjectSettings(
+ name=self.project_name, domain=self.os_creds.project_domain_name)
self.project = keystone_utils.create_project(self.keystone,
project_settings)
self.assertEqual(self.project_name, self.project.name)