26451bdbf6
Change-Id: I844c630235b76e6e1c6de20bf0ccfd2d3148f994
246 lines
7.4 KiB
Python
246 lines
7.4 KiB
Python
# Copyright 2016 Nokia
|
|
#
|
|
# 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 keystoneauth1 import loading as ka_loading
|
|
from keystoneauth1 import session as ka_session
|
|
from keystoneclient.v3 import client as ks_client_v3
|
|
from neutronclient.v2_0 import client as neutron_client
|
|
from oslo_utils import importutils as utils
|
|
from tempest.common import credentials_factory as common_creds
|
|
from tempest import config
|
|
from vitrageclient import client as vc
|
|
|
|
CONF = config.CONF
|
|
|
|
_client_modules = {
|
|
'aodh': 'aodhclient.client',
|
|
'nova': 'novaclient.client',
|
|
'cinder': 'cinderclient.client',
|
|
'glance': 'glanceclient.client',
|
|
'neutron': 'neutronclient.v2_0.client',
|
|
'heat': 'heatclient.client',
|
|
'mistral': 'mistralclient.api.v2.client',
|
|
'gnocchi': 'gnocchiclient.v1.client',
|
|
'trove': 'troveclient.v1.client'
|
|
}
|
|
|
|
|
|
def driver_module(driver):
|
|
mod_name = _client_modules[driver]
|
|
module = utils.import_module(mod_name)
|
|
return module
|
|
|
|
|
|
class TempestClients(object):
|
|
@classmethod
|
|
def class_init(cls, creds):
|
|
cls.creds = creds
|
|
cls._vitrage = None
|
|
cls._nova = None
|
|
cls._cinder = None
|
|
cls._glance = None
|
|
cls._neutron = None
|
|
cls._heat = None
|
|
cls._mistral = None
|
|
cls._aodh = None
|
|
cls._keystone = None
|
|
cls._gnocchi = None
|
|
|
|
@classmethod
|
|
def vitrage(cls):
|
|
"""vitrage client
|
|
|
|
:rtype: vitrageclient.v1.client.Client
|
|
"""
|
|
if not cls._vitrage:
|
|
cls._vitrage = vc.Client(
|
|
'1', session=cls._get_session_for_admin())
|
|
return cls._vitrage
|
|
|
|
@classmethod
|
|
def vitrage_client_for_user(cls):
|
|
"""vitrage client for a specific user and tenant
|
|
|
|
:rtype: vitrageclient.v1.client.Client
|
|
"""
|
|
session = cls._get_session_for_user()
|
|
return vc.Client('1', session=session)
|
|
|
|
@classmethod
|
|
def neutron_client_for_user(cls):
|
|
session = cls._get_session_for_user()
|
|
return neutron_client.Client(session=session)
|
|
|
|
@classmethod
|
|
def nova(cls):
|
|
"""nova client
|
|
|
|
:rtype: novaclient.v2.client.Client
|
|
"""
|
|
if not cls._nova:
|
|
n_client = driver_module('nova')
|
|
client = n_client.Client(
|
|
version=CONF.root_cause_analysis_service.nova_version,
|
|
session=cls._get_session_for_admin(),
|
|
)
|
|
cls._nova = client
|
|
return cls._nova
|
|
|
|
@classmethod
|
|
def cinder(cls):
|
|
"""cinder client
|
|
|
|
:rtype: cinderclient.v2.client.Client
|
|
"""
|
|
if not cls._cinder:
|
|
cin_client = driver_module('cinder')
|
|
client = cin_client.Client(
|
|
version=CONF.root_cause_analysis_service.cinder_version,
|
|
session=cls._get_session_for_admin(),
|
|
)
|
|
cls._cinder = client
|
|
return cls._cinder
|
|
|
|
@classmethod
|
|
def glance(cls):
|
|
"""glance client
|
|
|
|
:rtype: glanceclient.v2.client.Client
|
|
"""
|
|
if not cls._glance:
|
|
|
|
glan_client = driver_module('glance')
|
|
client = glan_client.Client(
|
|
version=CONF.root_cause_analysis_service.glance_version,
|
|
session=cls._get_session_for_admin(),
|
|
)
|
|
cls._glance = client
|
|
return cls._glance
|
|
|
|
@classmethod
|
|
def neutron(cls):
|
|
"""neutron client
|
|
|
|
:rtype: neutronclient.v2_0.client.Client
|
|
"""
|
|
if not cls._neutron:
|
|
ne_client = driver_module('neutron')
|
|
client = ne_client.Client(
|
|
session=cls._get_session_for_admin()
|
|
)
|
|
cls._neutron = client
|
|
return cls._neutron
|
|
|
|
@classmethod
|
|
def heat(cls):
|
|
"""heat client
|
|
|
|
:rtype: heatclient.v1.client.Client
|
|
"""
|
|
if not cls._heat:
|
|
he_client = driver_module('heat')
|
|
client = he_client.Client(
|
|
version=CONF.root_cause_analysis_service.heat_version,
|
|
session=cls._get_session_for_admin()
|
|
)
|
|
cls._heat = client
|
|
return cls._heat
|
|
|
|
@classmethod
|
|
def mistral(cls):
|
|
"""mistral client
|
|
|
|
:rtype: mistralclient.v2.client.Client
|
|
"""
|
|
if not cls._mistral:
|
|
mi_client = driver_module('mistral')
|
|
client = mi_client.Client(
|
|
session=cls._get_session_for_admin(),
|
|
)
|
|
cls._mistral = client
|
|
return cls._mistral
|
|
|
|
@classmethod
|
|
def aodh(cls):
|
|
"""aodh client
|
|
|
|
:rtype: aodhclient.v2.client.Client
|
|
"""
|
|
if not cls._aodh:
|
|
ao_client = driver_module('aodh')
|
|
client = ao_client.Client(
|
|
CONF.root_cause_analysis_service.aodh_version,
|
|
session=cls._get_session_for_admin())
|
|
cls._aodh = client
|
|
return cls._aodh
|
|
|
|
@classmethod
|
|
def keystone(cls):
|
|
"""keystone client
|
|
|
|
:rtype: keystoneclient.v3.client.Client
|
|
"""
|
|
if not cls._keystone:
|
|
sess = cls._get_session_for_admin()
|
|
cls._keystone = ks_client_v3.Client(session=sess)
|
|
return cls._keystone
|
|
|
|
@classmethod
|
|
def gnocchi(cls):
|
|
"""gnocchi client
|
|
|
|
:rtype: gnocchiclient.v1.client.Client
|
|
"""
|
|
if not cls._gnocchi:
|
|
gn_client = driver_module('gnocchi')
|
|
client = gn_client.Client(
|
|
session=cls._get_session_for_admin())
|
|
cls._gnocchi = client
|
|
return cls._gnocchi
|
|
|
|
@classmethod
|
|
def _get_session_for_admin(cls):
|
|
admin_creds = common_creds.get_configured_admin_credentials()
|
|
password = admin_creds.password
|
|
username = admin_creds.username
|
|
user_domain_id = admin_creds.user_domain_id
|
|
project_name = admin_creds.project_name
|
|
project_domain_id = admin_creds.project_domain_id
|
|
|
|
return cls._get_session(username, password, user_domain_id,
|
|
project_name, project_domain_id)
|
|
|
|
@classmethod
|
|
def _get_session_for_user(cls):
|
|
username = cls.creds.username
|
|
password = cls.creds.password
|
|
user_domain_id = cls.creds.user_domain_id
|
|
project_name = cls.creds.project_name
|
|
project_domain_id = cls.creds.project_domain_id
|
|
|
|
return cls._get_session(username, password, user_domain_id,
|
|
project_name, project_domain_id)
|
|
|
|
@classmethod
|
|
def _get_session(cls, username, password, user_domain_id, project_name,
|
|
project_domain_id):
|
|
loader = ka_loading.get_plugin_loader('password')
|
|
auth_url = CONF.identity.uri_v3
|
|
auth_plugin = loader.load_from_options(
|
|
auth_url=auth_url,
|
|
username=username, password=password, project_name=project_name,
|
|
project_domain_id=project_domain_id,
|
|
user_domain_id=user_domain_id)
|
|
return ka_session.Session(auth=auth_plugin)
|