Merge "Lazy load client classes"

This commit is contained in:
Jenkins 2016-07-06 09:49:40 +00:00 committed by Gerrit Code Review
commit dcd88f6f19
2 changed files with 124 additions and 71 deletions

View File

@ -14,28 +14,31 @@
import functools import functools
from barbicanclient import client as barbicanclient
from ceilometerclient.v2 import client as ceilometerclient
from cinderclient.v2 import client as cinderclient
from designateclient import v1 as designateclient
from glanceclient.v2 import client as glanceclient
from heatclient.v1 import client as heatclient
from ironic_inspector_client import v1 as ironic_inspector_client
from ironicclient.v1 import client as ironicclient
from keystoneclient.auth import identity
from keystoneclient import httpclient
from keystoneclient.v3 import client as keystoneclient
from magnumclient.v1 import client as magnumclient
from mistralclient.api.v2 import client as mistralclient
from muranoclient.v1 import client as muranoclient
from neutronclient.v2_0 import client as neutronclient
from novaclient import client as novaclient
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log from oslo_log import log
from swiftclient import client as swift_client from oslo_utils import importutils
from tackerclient.v1_0 import client as tackerclient
from troveclient.v1 import client as troveclient from keystoneclient.auth import identity
from zaqarclient.queues.v2 import client as zaqarclient from keystoneclient import httpclient
barbicanclient = importutils.try_import('barbicanclient.client')
ceilometerclient = importutils.try_import('ceilometerclient.v2.client')
cinderclient = importutils.try_import('cinderclient.v2.client')
designateclient = importutils.try_import('designateclient.v1')
glanceclient = importutils.try_import('glanceclient.v2.client')
heatclient = importutils.try_import('heatclient.v1.client')
keystoneclient = importutils.try_import('keystoneclient.v3.client')
ironic_inspector_client = importutils.try_import('ironic_inspector_client.v1')
ironicclient = importutils.try_import('ironicclient.v1.client')
magnumclient = importutils.try_import('magnumclient.v1.client')
mistralclient = importutils.try_import('mistralclient.api.v2.client')
muranoclient = importutils.try_import('muranoclient.v1.client')
neutronclient = importutils.try_import('neutronclient.v2_0.client')
novaclient = importutils.try_import('novaclient.client')
swift_client = importutils.try_import('swiftclient.client')
tackerclient = importutils.try_import('tackerclient.v1_0.client')
troveclient = importutils.try_import('troveclient.v1.client')
zaqarclient = importutils.try_import('zaqarclient.queues.v2.client')
from mistral.actions.openstack import base from mistral.actions.openstack import base
from mistral import context from mistral import context
@ -82,7 +85,10 @@ class NovaAction(base.OpenStackAction):
class GlanceAction(base.OpenStackAction): class GlanceAction(base.OpenStackAction):
_client_class = glanceclient.Client
@classmethod
def _get_client_class(cls):
return glanceclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -91,7 +97,7 @@ class GlanceAction(base.OpenStackAction):
glance_endpoint = keystone_utils.get_endpoint_for_project('glance') glance_endpoint = keystone_utils.get_endpoint_for_project('glance')
return self._client_class( return GlanceAction._get_client_class()(
glance_endpoint.url, glance_endpoint.url,
region_name=glance_endpoint.region, region_name=glance_endpoint.region,
token=ctx.auth_token token=ctx.auth_token
@ -99,11 +105,14 @@ class GlanceAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("fake_endpoint") return cls._get_client_class()("fake_endpoint")
class KeystoneAction(base.OpenStackAction): class KeystoneAction(base.OpenStackAction):
_client_class = keystoneclient.Client
@classmethod
def _get_client_class(cls):
return keystoneclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -125,7 +134,7 @@ class KeystoneAction(base.OpenStackAction):
or keystone_utils.is_token_trust_scoped(ctx.auth_token)): or keystone_utils.is_token_trust_scoped(ctx.auth_token)):
kwargs['endpoint'] = ctx.auth_uri kwargs['endpoint'] = ctx.auth_uri
client = self._client_class(**kwargs) client = KeystoneAction._get_client_class()(**kwargs)
client.management_url = ctx.auth_uri client.management_url = ctx.auth_uri
@ -137,7 +146,7 @@ class KeystoneAction(base.OpenStackAction):
authenticate = httpclient.HTTPClient.authenticate authenticate = httpclient.HTTPClient.authenticate
httpclient.HTTPClient.authenticate = lambda x: True httpclient.HTTPClient.authenticate = lambda x: True
fake_client = cls._client_class() fake_client = cls._get_client_class()()
# Once we get fake client, return back authenticate method # Once we get fake client, return back authenticate method
httpclient.HTTPClient.authenticate = authenticate httpclient.HTTPClient.authenticate = authenticate
@ -146,7 +155,10 @@ class KeystoneAction(base.OpenStackAction):
class CeilometerAction(base.OpenStackAction): class CeilometerAction(base.OpenStackAction):
_client_class = ceilometerclient.Client
@classmethod
def _get_client_class(cls):
return ceilometerclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -162,7 +174,7 @@ class CeilometerAction(base.OpenStackAction):
{'tenant_id': ctx.project_id} {'tenant_id': ctx.project_id}
) )
return self._client_class( return CeilometerAction._get_client_class()(
endpoint_url, endpoint_url,
region_name=ceilometer_endpoint.region, region_name=ceilometer_endpoint.region,
token=ctx.auth_token, token=ctx.auth_token,
@ -171,11 +183,14 @@ class CeilometerAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("") return cls._get_client_class()("")
class HeatAction(base.OpenStackAction): class HeatAction(base.OpenStackAction):
_client_class = heatclient.Client
@classmethod
def _get_client_class(cls):
return heatclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -192,7 +207,7 @@ class HeatAction(base.OpenStackAction):
} }
) )
return self._client_class( return HeatAction._get_client_class()(
endpoint_url, endpoint_url,
region_name=heat_endpoint.region, region_name=heat_endpoint.region,
token=ctx.auth_token, token=ctx.auth_token,
@ -201,11 +216,14 @@ class HeatAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("") return cls._get_client_class()("")
class NeutronAction(base.OpenStackAction): class NeutronAction(base.OpenStackAction):
_client_class = neutronclient.Client
@classmethod
def _get_client_class(cls):
return neutronclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -214,7 +232,7 @@ class NeutronAction(base.OpenStackAction):
neutron_endpoint = keystone_utils.get_endpoint_for_project('neutron') neutron_endpoint = keystone_utils.get_endpoint_for_project('neutron')
return self._client_class( return NeutronAction._get_client_class()(
endpoint_url=neutron_endpoint.url, endpoint_url=neutron_endpoint.url,
region_name=neutron_endpoint.region, region_name=neutron_endpoint.region,
token=ctx.auth_token, token=ctx.auth_token,
@ -223,7 +241,10 @@ class NeutronAction(base.OpenStackAction):
class CinderAction(base.OpenStackAction): class CinderAction(base.OpenStackAction):
_client_class = cinderclient.Client
@classmethod
def _get_client_class(cls):
return cinderclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -242,7 +263,7 @@ class CinderAction(base.OpenStackAction):
} }
) )
client = self._client_class( client = CinderAction._get_client_class()(
ctx.user_name, ctx.user_name,
ctx.auth_token, ctx.auth_token,
project_id=ctx.project_id, project_id=ctx.project_id,
@ -257,11 +278,14 @@ class CinderAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()
class MistralAction(base.OpenStackAction): class MistralAction(base.OpenStackAction):
_client_class = mistralclient.Client
@classmethod
def _get_client_class(cls):
return mistralclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -281,7 +305,7 @@ class MistralAction(base.OpenStackAction):
auth_url = keystone_endpoint.url auth_url = keystone_endpoint.url
mistral_url = None mistral_url = None
return self._client_class( return MistralAction._get_client_class()(
mistral_url=mistral_url, mistral_url=mistral_url,
auth_token=ctx.auth_token, auth_token=ctx.auth_token,
project_id=ctx.project_id, project_id=ctx.project_id,
@ -291,11 +315,14 @@ class MistralAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()
class TroveAction(base.OpenStackAction): class TroveAction(base.OpenStackAction):
_client_class = troveclient.Client
@classmethod
def _get_client_class(cls):
return troveclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -311,7 +338,7 @@ class TroveAction(base.OpenStackAction):
{'tenant_id': ctx.project_id} {'tenant_id': ctx.project_id}
) )
client = self._client_class( client = TroveAction._get_client_class()(
ctx.user_name, ctx.user_name,
ctx.auth_token, ctx.auth_token,
project_id=ctx.project_id, project_id=ctx.project_id,
@ -326,11 +353,14 @@ class TroveAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("fake_user", "fake_passwd") return cls._get_client_class()("fake_user", "fake_passwd")
class IronicAction(base.OpenStackAction): class IronicAction(base.OpenStackAction):
_client_class = ironicclient.Client
@classmethod
def _get_client_class(cls):
return ironicclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -339,7 +369,7 @@ class IronicAction(base.OpenStackAction):
ironic_endpoint = keystone_utils.get_endpoint_for_project('ironic') ironic_endpoint = keystone_utils.get_endpoint_for_project('ironic')
return self._client_class( return IronicAction._get_client_class()(
ironic_endpoint.url, ironic_endpoint.url,
token=ctx.auth_token, token=ctx.auth_token,
region_name=ironic_endpoint.region region_name=ironic_endpoint.region
@ -347,11 +377,14 @@ class IronicAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("http://127.0.0.1:6385/") return cls._get_client_class()("http://127.0.0.1:6385/")
class BaremetalIntrospectionAction(base.OpenStackAction): class BaremetalIntrospectionAction(base.OpenStackAction):
_client_class = ironic_inspector_client.ClientV1
@classmethod
def _get_client_class(cls):
return ironic_inspector_client.ClientV1
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -362,7 +395,7 @@ class BaremetalIntrospectionAction(base.OpenStackAction):
service_type='baremetal-introspection' service_type='baremetal-introspection'
) )
return self._client_class( return BaremetalIntrospectionAction._get_client_class()(
api_version=1, api_version=1,
inspector_url=inspector_endpoint.url, inspector_url=inspector_endpoint.url,
auth_token=ctx.auth_token, auth_token=ctx.auth_token,
@ -370,7 +403,10 @@ class BaremetalIntrospectionAction(base.OpenStackAction):
class SwiftAction(base.OpenStackAction): class SwiftAction(base.OpenStackAction):
_client_class = swift_client.Connection
@classmethod
def _get_client_class(cls):
return swift_client.Connection
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -384,11 +420,14 @@ class SwiftAction(base.OpenStackAction):
'preauthtoken': ctx.auth_token 'preauthtoken': ctx.auth_token
} }
return self._client_class(**kwargs) return SwiftAction._get_client_class()(**kwargs)
class ZaqarAction(base.OpenStackAction): class ZaqarAction(base.OpenStackAction):
_client_class = zaqarclient.Client
@classmethod
def _get_client_class(cls):
return zaqarclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -407,11 +446,11 @@ class ZaqarAction(base.OpenStackAction):
auth_opts = {'backend': 'keystone', 'options': opts} auth_opts = {'backend': 'keystone', 'options': opts}
conf = {'auth_opts': auth_opts} conf = {'auth_opts': auth_opts}
return self._client_class(zaqar_endpoint.url, conf=conf) return ZaqarAction._get_client_class()(zaqar_endpoint.url, conf=conf)
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class("") return cls._get_client_class()("")
@classmethod @classmethod
def _get_client_method(cls, client): def _get_client_method(cls, client):
@ -481,7 +520,10 @@ class ZaqarAction(base.OpenStackAction):
class BarbicanAction(base.OpenStackAction): class BarbicanAction(base.OpenStackAction):
_client_class = barbicanclient.Client
@classmethod
def _get_client_class(cls):
return barbicanclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -498,7 +540,7 @@ class BarbicanAction(base.OpenStackAction):
tenant_id=ctx.project_id tenant_id=ctx.project_id
) )
return self._client_class( return BarbicanAction._get_client_class()(
project_id=ctx.project_id, project_id=ctx.project_id,
endpoint=barbican_endpoint.url, endpoint=barbican_endpoint.url,
auth=auth auth=auth
@ -506,7 +548,7 @@ class BarbicanAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class( return cls._get_client_class()(
project_id="1", project_id="1",
endpoint="http://127.0.0.1:9311" endpoint="http://127.0.0.1:9311"
) )
@ -580,7 +622,10 @@ class BarbicanAction(base.OpenStackAction):
class DesignateAction(base.OpenStackAction): class DesignateAction(base.OpenStackAction):
_client_class = designateclient.Client
@classmethod
def _get_client_class(cls):
return designateclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -596,7 +641,7 @@ class DesignateAction(base.OpenStackAction):
{'tenant_id': ctx.project_id} {'tenant_id': ctx.project_id}
) )
client = self._client_class( client = DesignateAction._get_client_class()(
endpoint=designate_url, endpoint=designate_url,
tenant_id=ctx.project_id, tenant_id=ctx.project_id,
auth_url=ctx.auth_uri, auth_url=ctx.auth_uri,
@ -611,11 +656,14 @@ class DesignateAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()
class MagnumAction(base.OpenStackAction): class MagnumAction(base.OpenStackAction):
_client_class = magnumclient.Client
@classmethod
def _get_client_class(cls):
return magnumclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -626,7 +674,7 @@ class MagnumAction(base.OpenStackAction):
auth_url = keystone_endpoint.url auth_url = keystone_endpoint.url
magnum_url = keystone_utils.get_endpoint_for_project('magnum').url magnum_url = keystone_utils.get_endpoint_for_project('magnum').url
return self._client_class( return MagnumAction._get_client_class()(
magnum_url=magnum_url, magnum_url=magnum_url,
auth_token=ctx.auth_token, auth_token=ctx.auth_token,
project_id=ctx.project_id, project_id=ctx.project_id,
@ -636,11 +684,14 @@ class MagnumAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()
class MuranoAction(base.OpenStackAction): class MuranoAction(base.OpenStackAction):
_client_class = muranoclient.Client
@classmethod
def _get_client_class(cls):
return muranoclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -650,7 +701,7 @@ class MuranoAction(base.OpenStackAction):
keystone_endpoint = keystone_utils.get_keystone_endpoint_v2() keystone_endpoint = keystone_utils.get_keystone_endpoint_v2()
murano_endpoint = keystone_utils.get_endpoint_for_project('murano') murano_endpoint = keystone_utils.get_endpoint_for_project('murano')
return self._client_class( return MuranoAction._get_client_class()(
endpoint=murano_endpoint.url, endpoint=murano_endpoint.url,
token=ctx.auth_token, token=ctx.auth_token,
tenant=ctx.project_id, tenant=ctx.project_id,
@ -660,11 +711,14 @@ class MuranoAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()
class TackerAction(base.OpenStackAction): class TackerAction(base.OpenStackAction):
_client_class = tackerclient.Client
@classmethod
def _get_client_class(cls):
return tackerclient.Client
def _get_client(self): def _get_client(self):
ctx = context.ctx() ctx = context.ctx()
@ -674,7 +728,7 @@ class TackerAction(base.OpenStackAction):
keystone_endpoint = keystone_utils.get_keystone_endpoint_v2() keystone_endpoint = keystone_utils.get_keystone_endpoint_v2()
tacker_endpoint = keystone_utils.get_endpoint_for_project('tacker') tacker_endpoint = keystone_utils.get_endpoint_for_project('tacker')
return self._client_class( return TackerAction._get_client_class()(
endpoint_url=tacker_endpoint.url, endpoint_url=tacker_endpoint.url,
token=ctx.auth_token, token=ctx.auth_token,
tenant_id=ctx.project_id, tenant_id=ctx.project_id,
@ -684,4 +738,4 @@ class TackerAction(base.OpenStackAction):
@classmethod @classmethod
def _get_fake_client(cls): def _get_fake_client(cls):
return cls._client_class() return cls._get_client_class()()

View File

@ -31,7 +31,6 @@ class OpenStackAction(base.Action):
which are constructed via OpenStack Action generators. which are constructed via OpenStack Action generators.
""" """
_kwargs_for_run = {} _kwargs_for_run = {}
_client_class = None
client_method_name = None client_method_name = None
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -64,8 +63,8 @@ class OpenStackAction(base.Action):
It is needed for getting client-method args and description for It is needed for getting client-method args and description for
saving into DB. saving into DB.
""" """
# Default is simple _client_class instance # Default is simple _get_client_class instance
return cls._client_class() return cls._get_client_class()
@classmethod @classmethod
def get_fake_client_method(cls): def get_fake_client_method(cls):