diff --git a/contrib/rackspace/heat_keystoneclient_v2/client.py b/contrib/rackspace/heat_keystoneclient_v2/client.py index 66bc8d4312..64f028e5de 100644 --- a/contrib/rackspace/heat_keystoneclient_v2/client.py +++ b/contrib/rackspace/heat_keystoneclient_v2/client.py @@ -13,6 +13,8 @@ """Client Library for Keystone Resources.""" +import weakref + from keystoneclient.v2_0 import client as kc from oslo_config import cfg from oslo_log import log as logging @@ -48,7 +50,7 @@ class KeystoneClientV2(object): # get a new trust-token even if context.auth_token is set. # # - context.auth_url is expected to contain the v2.0 keystone endpoint - self.context = context + self._context = weakref.ref(context) self._client = None if self.context.trust_id: @@ -56,6 +58,12 @@ class KeystoneClientV2(object): # populates self.context.auth_token with a trust-scoped token self._client = self._v2_client_init() + @property + def context(self): + ctxt = self._context() + assert ctxt is not None, "Need a reference to the context" + return ctxt + @property def client(self): if not self._client: diff --git a/heat/common/heat_keystoneclient.py b/heat/common/heat_keystoneclient.py index 97ecf470de..5c445d011e 100644 --- a/heat/common/heat_keystoneclient.py +++ b/heat/common/heat_keystoneclient.py @@ -15,6 +15,7 @@ import collections import uuid +import weakref from keystoneclient.auth.identity import v3 as kc_auth_v3 import keystoneclient.exceptions as kc_exception @@ -69,7 +70,7 @@ class KeystoneClientV3(object): # # - context.auth_url is expected to contain a versioned keystone # path, we will work with either a v2.0 or v3 path - self.context = context + self._context = weakref.ref(context) self._client = None self._admin_auth = None self._domain_admin_auth = None @@ -96,6 +97,12 @@ class KeystoneClientV3(object): LOG.debug('Using stack domain %s' % self.stack_domain) + @property + def context(self): + ctxt = self._context() + assert ctxt is not None, "Need a reference to the context" + return ctxt + @property def stack_domain(self): """Domain scope data.