From 1dc89292dc998b3a1883b0e5b405caa4bb718a04 Mon Sep 17 00:00:00 2001 From: Clint Byrum Date: Tue, 20 May 2014 12:47:25 -0700 Subject: [PATCH] Split keystone away from heat collector This will help segregate the changes as we abstract away details of keystone such as caching the tokens. Change-Id: I81ccb17658e5c9fa349fb183240f901d61b1fa93 Related-Bug: #1321437 --- os_collect_config/heat.py | 6 +++-- os_collect_config/keystone.py | 41 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 os_collect_config/keystone.py diff --git a/os_collect_config/heat.py b/os_collect_config/heat.py index 8c2f926..4f3325a 100644 --- a/os_collect_config/heat.py +++ b/os_collect_config/heat.py @@ -18,6 +18,7 @@ from oslo.config import cfg from openstack.common import log from os_collect_config import exc +from os_collect_config import keystone CONF = cfg.CONF logger = log.getLogger(__name__) @@ -67,11 +68,12 @@ class Collector(object): raise exc.HeatMetadataNotConfigured try: - ks = self.keystoneclient.Client( + ks = keystone.Keystone( auth_url=CONF.heat.auth_url, user_id=CONF.heat.user_id, password=CONF.heat.password, - project_id=CONF.heat.project_id) + project_id=CONF.heat.project_id, + keystoneclient=self.keystoneclient).client endpoint = ks.service_catalog.url_for( service_type='orchestration', endpoint_type='publicURL') logger.debug('Fetching metadata from %s' % endpoint) diff --git a/os_collect_config/keystone.py b/os_collect_config/keystone.py new file mode 100644 index 0000000..0a9f3d0 --- /dev/null +++ b/os_collect_config/keystone.py @@ -0,0 +1,41 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from keystoneclient.v3 import client as ks_keystoneclient + + +class Keystone(object): + '''A keystone wrapper class. + + This wrapper is used to encapsulate any keystone related operations + os-collect-config may need to perform. Eventually this will be used + to implement memoization to reuse auth references stored on disk. + ''' + def __init__(self, auth_url, user_id, password, project_id, + keystoneclient=None): + '''Initialize Keystone wrapper. + + @param string auth_url auth_url for keystoneclient + @param string user_id user_id for keystoneclient + @param string project_id project_id for keystoneclient + @param object keystoneclient optional keystoneclient implementation. + Uses keystoneclient.v3 if unspecified. + ''' + if not keystoneclient: + keystoneclient = ks_keystoneclient + self.client = keystoneclient.Client( + auth_url=auth_url, + user_id=user_id, + password=password, + project_id=project_id)