Move all_tenants and edit_managed attributes to designate Client

Initializing designate client with a pre-existing keystone session
won't work as designate expects keystone session to have the
'all_tenants' and 'edit_managed' attributes:

Example code:

    keystone_session = ksc_session.Session(
      auth=keystone_auth,
      verify=True,
      cert=my_cert
    )

than later:

    self._designate_client = designate_client(
      session=keystone_session,
      region_name=region_name
    )

with that code, wrap_api_call() will raise an exception:

  AttributeError: 'Session' object has no attribute 'all_tenants'

Same goes for 'edit_managed'.

This patch moves both attributes from Keystone session to designate
Client.

Closes-Bug: 1457821
Change-Id: I13d6c9ed46406fefc8cfa5de46811e4be009f1af
This commit is contained in:
Davide Guerri 2015-05-22 11:22:23 +01:00
parent af7bdadf43
commit 34d14b06d9
4 changed files with 11 additions and 12 deletions

@ -31,7 +31,9 @@ class Command(CliffCommand):
self.client = Client(
region_name=self.app.options.os_region_name,
service_type=self.app.options.os_service_type,
session=self.app.session)
session=self.app.session,
all_tenants=self.app.options.all_tenants,
edit_managed=self.app.options.edit_managed)
try:
return super(Command, self).run(parsed_args)

@ -234,9 +234,7 @@ class DesignateShell(App):
user_domain_name=self.options.os_user_domain_name,
token=self.options.os_token,
insecure=self.options.insecure,
cacert=self.options.os_cacert,
all_tenants=self.options.all_tenants,
edit_managed=self.options.edit_managed
cacert=self.options.os_cacert
)
def run(self, argv):

@ -101,7 +101,7 @@ def get_columns(data):
def get_session(auth_url, endpoint, domain_id, domain_name, project_id,
project_name, project_domain_name, project_domain_id, username,
user_id, password, user_domain_id, user_domain_name, token,
insecure, cacert, all_tenants, edit_managed):
insecure, cacert):
session = ks_session.Session()
# Build + Attach Authentication Plugin
@ -139,8 +139,6 @@ def get_session(auth_url, endpoint, domain_id, domain_name, project_id,
session.verify = False
else:
session.verify = cacert
session.all_tenants = all_tenants
session.edit_managed = edit_managed
return session

@ -62,11 +62,12 @@ class Client(object):
user_domain_name=user_domain_name,
token=token,
insecure=insecure,
cacert=cacert,
all_tenants=all_tenants,
edit_managed=edit_managed,
cacert=cacert
)
self.all_tenants = all_tenants
self.edit_managed = edit_managed
# Since we have to behave nicely like a legacy client/bindings we use
# an adapter around the session to not modify it's state.
interface = endpoint_type.rstrip('URL')
@ -99,9 +100,9 @@ class Client(object):
kw['raise_exc'] = False
kw.setdefault('headers', {})
kw['headers'].setdefault('Content-Type', 'application/json')
if self.session.session.all_tenants:
if self.all_tenants:
kw['headers'].update({'X-Auth-All-Projects': 'true'})
if self.session.session.edit_managed:
if self.edit_managed:
kw['headers'].update({'X-Designate-Edit-Managed-Records': 'true'})
# Trigger the request