X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=snaps%2Fopenstack%2Fcreate_user.py;h=aefebe45c48a89de72a571effa9ef880febd8752;hb=60cb38cd5ea0a7ad5d6ed164a0b8ac622871b154;hp=a8d0fcc6474c857d67027a1886781ebba9cf1d12;hpb=57777f3df521553a06cd01a3861b415d2905ceca;p=snaps.git diff --git a/snaps/openstack/create_user.py b/snaps/openstack/create_user.py index a8d0fcc..aefebe4 100644 --- a/snaps/openstack/create_user.py +++ b/snaps/openstack/create_user.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"); @@ -13,9 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging + from keystoneclient.exceptions import NotFound -from snaps.openstack.os_credentials import OSCreds +from snaps.config.user import UserConfig +from snaps.openstack.openstack_creator import OpenStackIdentityObject +from snaps.openstack.os_credentials import OSCreds from snaps.openstack.utils import keystone_utils __author__ = 'spisarski' @@ -23,9 +26,9 @@ __author__ = 'spisarski' logger = logging.getLogger('create_user') -class OpenStackUser: +class OpenStackUser(OpenStackIdentityObject): """ - Class responsible for creating a user in OpenStack + Class responsible for managing a user in OpenStack """ def __init__(self, os_creds, user_settings): @@ -35,25 +38,31 @@ class OpenStackUser: :param user_settings: The user settings :return: """ - self.__os_creds = os_creds + super(self.__class__, self).__init__(os_creds) + self.user_settings = user_settings self.__user = None - self.__keystone = keystone_utils.keystone_client(self.__os_creds) - def create(self, cleanup=False): + def initialize(self): """ Creates the user in OpenStack if it does not already exist - :param cleanup: Denotes whether or not this is being called for cleanup or not - :return: The OpenStack user object + :return: The User domain object """ - self.__user = keystone_utils.get_user(self.__keystone, self.user_settings.name) - if self.__user: - logger.info('Found user with name - ' + self.user_settings.name) - elif not cleanup: - self.__user = keystone_utils.create_user(self.__keystone, self.user_settings) - else: - logger.info('Did not create user due to cleanup mode') + super(self.__class__, self).initialize() + self.__user = keystone_utils.get_user(self._keystone, + self.user_settings.name) + return self.__user + + def create(self, cleanup=False): + """ + Creates a User if one does not already exist + :return: The User domain object + """ + self.initialize() + if not self.__user: + self.__user = keystone_utils.create_user(self._keystone, + self.user_settings) return self.__user def clean(self): @@ -63,7 +72,7 @@ class OpenStackUser: """ if self.__user: try: - keystone_utils.delete_user(self.__keystone, self.__user) + keystone_utils.delete_user(self._keystone, self.__user) except NotFound: pass self.__user = None @@ -78,60 +87,43 @@ class OpenStackUser: def get_os_creds(self, project_name=None): """ Returns an OSCreds object based on this user account and a project - :param project_name: the name of the project to leverage in the credentials + :param project_name: the name of the project to leverage in the + credentials :return: """ - return OSCreds(username=self.user_settings.name, - password=self.user_settings.password, - auth_url=self.__os_creds.auth_url, - project_name=project_name, - identity_api_version=self.__os_creds.identity_api_version, - user_domain_id=self.__os_creds.user_domain_id, - project_domain_id=self.__os_creds.project_domain_id, - proxy_settings=self.__os_creds.proxy_settings) - - -class UserSettings: - def __init__(self, config=None, name=None, password=None, project_name=None, domain_name='default', email=None, - enabled=True): - - """ - Constructor - :param config: dict() object containing the configuration settings using the attribute names below as each - member's the key and overrides any of the other parameters. - :param name: the user's name (required) - :param password: the user's password (required) - :param project_name: the user's primary project name (optional) - :param domain_name: the user's domain name (default='default'). For v3 APIs - :param email: the user's email address (optional) - :param enabled: denotes whether or not the user is enabled (default True) - """ + if not project_name: + project_name = self._os_creds.project_name + + return OSCreds( + username=self.user_settings.name, + password=self.user_settings.password, + auth_url=self._os_creds.auth_url, + project_name=project_name, + identity_api_version=self._os_creds.identity_api_version, + image_api_version=self._os_creds.image_api_version, + network_api_version=self._os_creds.network_api_version, + compute_api_version=self._os_creds.compute_api_version, + heat_api_version=self._os_creds.heat_api_version, + volume_api_version=self._os_creds.volume_api_version, + region_name=self._os_creds.region_name, + user_domain_name=self._os_creds.user_domain_name, + user_domain_id=self._os_creds.user_domain_id, + project_domain_name=self._os_creds.project_domain_name, + project_domain_id=self._os_creds.project_domain_id, + interface=self._os_creds.interface, + proxy_settings=self._os_creds.proxy_settings, + cacert=self._os_creds.cacert) + + +class UserSettings(UserConfig): + """ + Class to hold the configuration settings required for creating OpenStack + user objects + deprecated + """ - if config: - self.name = config.get('name') - self.password = config.get('password') - self.project_name = config.get('project_name') - self.email = config.get('email') - - if config.get('domain_name'): - self.domain_name = config['domain_name'] - else: - self.domain_name = domain_name - - if config.get('enabled') is not None: - self.enabled = config['enabled'] - else: - self.enabled = enabled - else: - self.name = name - self.password = password - self.project_name = project_name - self.email = email - self.enabled = enabled - self.domain_name = domain_name - - if not self.name or not self.password: - raise Exception('The attributes name and password are required for UserSettings') - - if not isinstance(self.enabled, bool): - raise Exception('The attribute enabled must be of type boolean') + def __init__(self, **kwargs): + from warnings import warn + warn('Use snaps.config.user.UserConfig instead', + DeprecationWarning) + super(self.__class__, self).__init__(**kwargs)