Do not use OpenStack services clients from Vitrage
This patch adds python-*client initialization inside vitrage-tempest-plugin. Also for CLI calls all auth params are taken from config now. Configuration via environment variables is not supported. Story: 2004053 Task: 27631 Task: 28634 Change-Id: If873d36b4785369127cd3b4f8ce8ab64f09dc2b6
This commit is contained in:
parent
a0f3db18e4
commit
be69eba436
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
vitrage-tempest-plugin uses tempest.conf for any kind of configuration.
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
Configuration via environment variables is not supported. If you need
|
||||||
|
configuration via environment variables, please use previous release of
|
||||||
|
vitrage-tempest-plugin.
|
@ -4,22 +4,24 @@
|
|||||||
# The order of packages isrequirementst, because pip processes them in the order
|
# The order of packages isrequirementst, because pip processes them in the order
|
||||||
|
|
||||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||||
aodhclient>=0.9.0 # Apache-2.0
|
aodhclient>=1.0.0 # Apache-2.0
|
||||||
|
gnocchiclient>=3.3.1 # Apache-2.0
|
||||||
PyYAML>=3.12 # MIT
|
PyYAML>=3.12 # MIT
|
||||||
python-heatclient>=1.10.0 # Apache-2.0
|
python-heatclient>=1.14.0 # Apache-2.0
|
||||||
python-ceilometerclient>=2.5.0 # Apache-2.0
|
python-ceilometerclient>=2.9.0 # Apache-2.0
|
||||||
python-cinderclient>=3.3.0 # Apache-2.0
|
python-cinderclient>=3.3.0 # Apache-2.0
|
||||||
python-dateutil>=2.5.3 # BSD
|
python-dateutil>=2.5.3 # BSD
|
||||||
python-keystoneclient>=3.15.0 # Apache-2.0
|
python-keystoneclient>=3.15.0 # Apache-2.0
|
||||||
python-neutronclient>=6.7.0 # Apache-2.0
|
python-neutronclient>=6.7.0 # Apache-2.0
|
||||||
python-novaclient>=9.1.0 # Apache-2.0
|
python-novaclient>=10.1.0 # Apache-2.0
|
||||||
python-mistralclient!=3.2.0,>=3.1.0 # Apache-2.0
|
python-mistralclient>=3.3.0 # Apache-2.0
|
||||||
python-glanceclient>=2.8.0 # Apache-2.0
|
python-glanceclient>=2.8.0 # Apache-2.0
|
||||||
python-vitrageclient>=2.0.0 # Apache-2.0
|
python-vitrageclient>=2.0.0 # Apache-2.0
|
||||||
six>=1.10.0 # MIT
|
six>=1.10.0 # MIT
|
||||||
oslo.config>=5.2.0 # Apache-2.0
|
oslo.config>=5.2.0 # Apache-2.0
|
||||||
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
||||||
oslo.log>=3.36.0 # Apache-2.0
|
oslo.log>=3.36.0 # Apache-2.0
|
||||||
|
oslo.utils>=3.36.0 # Apache-2.0
|
||||||
testtools>=2.2.0 # MIT
|
testtools>=2.2.0 # MIT
|
||||||
oslotest>=3.2.0 # Apache-2.0
|
oslotest>=3.2.0 # Apache-2.0
|
||||||
tempest>=17.1.0 # Apache-2.0
|
tempest>=17.1.0 # Apache-2.0
|
||||||
|
@ -35,4 +35,13 @@ RcaServiceGroup = [
|
|||||||
default=120,
|
default=120,
|
||||||
min=10,
|
min=10,
|
||||||
help='Time to wait between subsequent datasource snapshots'),
|
help='Time to wait between subsequent datasource snapshots'),
|
||||||
|
cfg.StrOpt('aodh_version', default='2', help='Aodh version'),
|
||||||
|
cfg.StrOpt('ceilometer_version', default='2', help='Ceilometer version'),
|
||||||
|
cfg.StrOpt('nova_version', default='2.11', help='Nova version'),
|
||||||
|
cfg.StrOpt('cinder_version', default='3', help='Cinder version'),
|
||||||
|
cfg.StrOpt('glance_version', default='2', help='Glance version'),
|
||||||
|
cfg.StrOpt('heat_version', default='1', help='Heat version'),
|
||||||
|
cfg.StrOpt('mistral_version', default='2', help='Mistral version'),
|
||||||
|
cfg.StrOpt('gnocchi_version', default='1', help='Gnocchi version'),
|
||||||
|
cfg.StrOpt('trove_version', default='1', help='Trove version'),
|
||||||
]
|
]
|
||||||
|
@ -64,7 +64,7 @@ class TestResource(BaseVitrageTempest):
|
|||||||
LOG.info("api_resources = %s", api_resources)
|
LOG.info("api_resources = %s", api_resources)
|
||||||
|
|
||||||
cli_resources = utils.run_vitrage_command(
|
cli_resources = utils.run_vitrage_command(
|
||||||
'vitrage resource list --all -f json', self.conf)
|
'vitrage resource list --all -f json')
|
||||||
|
|
||||||
self._compare_resources(api_resources, cli_resources)
|
self._compare_resources(api_resources, cli_resources)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -60,7 +60,7 @@ class TestValidate(BaseTemplateTest):
|
|||||||
"""
|
"""
|
||||||
api_template_list = self.vitrage_client.template.list()
|
api_template_list = self.vitrage_client.template.list()
|
||||||
cli_template_list = utils.run_vitrage_command(
|
cli_template_list = utils.run_vitrage_command(
|
||||||
'vitrage template list', self.conf)
|
'vitrage template list')
|
||||||
|
|
||||||
self._compare_template_lists(api_template_list, cli_template_list)
|
self._compare_template_lists(api_template_list, cli_template_list)
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ class TemplatesDBTest(BaseTemplateTest):
|
|||||||
# Add standard ,equivalence and definition templates
|
# Add standard ,equivalence and definition templates
|
||||||
templates_names = self._add_templates()
|
templates_names = self._add_templates()
|
||||||
cli_templates_list = utils.run_vitrage_command(
|
cli_templates_list = utils.run_vitrage_command(
|
||||||
"vitrage template list", self.conf)
|
"vitrage template list")
|
||||||
api_templates_list = self.client.template.list()
|
api_templates_list = self.client.template.list()
|
||||||
|
|
||||||
self.assertThat(api_templates_list, IsNotEmpty(),
|
self.assertThat(api_templates_list, IsNotEmpty(),
|
||||||
|
@ -53,8 +53,7 @@ class TestTopology(BaseTopologyTest):
|
|||||||
"""
|
"""
|
||||||
api_graph = self.vitrage_client.topology.get(all_tenants=True)
|
api_graph = self.vitrage_client.topology.get(all_tenants=True)
|
||||||
cli_graph = utils.run_vitrage_command(
|
cli_graph = utils.run_vitrage_command(
|
||||||
'vitrage topology show --all-tenants',
|
'vitrage topology show --all-tenants')
|
||||||
self.conf)
|
|
||||||
|
|
||||||
LOG.info('api-graph=%(api)s cli-graph=%(cli)s', {'api': api_graph,
|
LOG.info('api-graph=%(api)s cli-graph=%(cli)s', {'api': api_graph,
|
||||||
'cli': cli_graph})
|
'cli': cli_graph})
|
||||||
|
@ -16,13 +16,32 @@ from keystoneauth1 import loading as ka_loading
|
|||||||
from keystoneauth1 import session as ka_session
|
from keystoneauth1 import session as ka_session
|
||||||
from keystoneclient.v3 import client as ks_client_v3
|
from keystoneclient.v3 import client as ks_client_v3
|
||||||
from neutronclient.v2_0 import client as neutron_client
|
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.common import credentials_factory as common_creds
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from vitrage import os_clients
|
|
||||||
from vitrageclient import client as vc
|
from vitrageclient import client as vc
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
|
|
||||||
|
_client_modules = {
|
||||||
|
'aodh': 'aodhclient.client',
|
||||||
|
'ceilometer': 'ceilometerclient.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):
|
class TempestClients(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -73,7 +92,12 @@ class TempestClients(object):
|
|||||||
:rtype: ceilometerclient.v2.client.Client
|
:rtype: ceilometerclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._ceilometer:
|
if not cls._ceilometer:
|
||||||
cls._ceilometer = os_clients.ceilometer_client(cls._conf)
|
cm_client = driver_module('ceilometer')
|
||||||
|
client = cm_client.get_client(
|
||||||
|
version=CONF.root_cause_analysis_service.ceilometer_version,
|
||||||
|
session=cls._get_session_for_admin(),
|
||||||
|
)
|
||||||
|
cls._ceilometer = client
|
||||||
return cls._ceilometer
|
return cls._ceilometer
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -83,7 +107,12 @@ class TempestClients(object):
|
|||||||
:rtype: novaclient.v2.client.Client
|
:rtype: novaclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._nova:
|
if not cls._nova:
|
||||||
cls._nova = os_clients.nova_client(cls._conf)
|
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
|
return cls._nova
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -93,7 +122,12 @@ class TempestClients(object):
|
|||||||
:rtype: cinderclient.v2.client.Client
|
:rtype: cinderclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._cinder:
|
if not cls._cinder:
|
||||||
cls._cinder = os_clients.cinder_client(cls._conf)
|
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
|
return cls._cinder
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -103,7 +137,13 @@ class TempestClients(object):
|
|||||||
:rtype: glanceclient.v2.client.Client
|
:rtype: glanceclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._glance:
|
if not cls._glance:
|
||||||
cls._glance = os_clients.glance_client(cls._conf)
|
|
||||||
|
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
|
return cls._glance
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -113,7 +153,11 @@ class TempestClients(object):
|
|||||||
:rtype: neutronclient.v2_0.client.Client
|
:rtype: neutronclient.v2_0.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._neutron:
|
if not cls._neutron:
|
||||||
cls._neutron = os_clients.neutron_client(cls._conf)
|
ne_client = driver_module('neutron')
|
||||||
|
client = ne_client.Client(
|
||||||
|
session=cls._get_session_for_admin()
|
||||||
|
)
|
||||||
|
cls._neutron = client
|
||||||
return cls._neutron
|
return cls._neutron
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -123,7 +167,12 @@ class TempestClients(object):
|
|||||||
:rtype: heatclient.v1.client.Client
|
:rtype: heatclient.v1.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._heat:
|
if not cls._heat:
|
||||||
cls._heat = os_clients.heat_client(cls._conf)
|
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
|
return cls._heat
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -133,7 +182,11 @@ class TempestClients(object):
|
|||||||
:rtype: mistralclient.v2.client.Client
|
:rtype: mistralclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._mistral:
|
if not cls._mistral:
|
||||||
cls._mistral = os_clients.mistral_client(cls._conf)
|
mi_client = driver_module('mistral')
|
||||||
|
client = mi_client.Client(
|
||||||
|
session=cls._get_session_for_admin(),
|
||||||
|
)
|
||||||
|
cls._mistral = client
|
||||||
return cls._mistral
|
return cls._mistral
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -143,7 +196,11 @@ class TempestClients(object):
|
|||||||
:rtype: aodhclient.v2.client.Client
|
:rtype: aodhclient.v2.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._aodh:
|
if not cls._aodh:
|
||||||
cls._aodh = os_clients.aodh_client(cls._conf)
|
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
|
return cls._aodh
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -164,7 +221,10 @@ class TempestClients(object):
|
|||||||
:rtype: gnocchiclient.v1.client.Client
|
:rtype: gnocchiclient.v1.client.Client
|
||||||
"""
|
"""
|
||||||
if not cls._gnocchi:
|
if not cls._gnocchi:
|
||||||
cls._gnocchi = os_clients.gnocchi_client(cls._conf)
|
gn_client = driver_module('gnocchi')
|
||||||
|
client = gn_client.Client(
|
||||||
|
session=cls._get_session_for_admin())
|
||||||
|
cls._gnocchi = client
|
||||||
return cls._gnocchi
|
return cls._gnocchi
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -16,7 +16,6 @@ import json
|
|||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from testtools.matchers import HasLength
|
from testtools.matchers import HasLength
|
||||||
|
|
||||||
from vitrage import os_clients
|
|
||||||
from vitrage_tempest_plugin.tests.api.event.base import BaseTestEvents
|
from vitrage_tempest_plugin.tests.api.event.base import BaseTestEvents
|
||||||
from vitrage_tempest_plugin.tests.common.tempest_clients import TempestClients
|
from vitrage_tempest_plugin.tests.common.tempest_clients import TempestClients
|
||||||
from vitrage_tempest_plugin.tests.common import vitrage_utils as v_utils
|
from vitrage_tempest_plugin.tests.common import vitrage_utils as v_utils
|
||||||
@ -55,7 +54,7 @@ class TestMistralNotifier(BaseTestEvents):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
super(TestMistralNotifier, cls).setUpClass()
|
super(TestMistralNotifier, cls).setUpClass()
|
||||||
cls.mistral_client = os_clients.mistral_client(cls.conf)
|
cls.mistral_client = TempestClients.mistral()
|
||||||
cls._templates = []
|
cls._templates = []
|
||||||
cls._templates.append(v_utils.add_template('v1_execute_mistral.yaml'))
|
cls._templates.append(v_utils.add_template('v1_execute_mistral.yaml'))
|
||||||
cls._templates.append(v_utils.add_template('v2_execute_mistral.yaml'))
|
cls._templates.append(v_utils.add_template('v2_execute_mistral.yaml'))
|
||||||
|
@ -14,57 +14,44 @@
|
|||||||
|
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
import socket
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from oslo_config.cfg import NoSuchOptError
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
from tempest.common import credentials_factory as common_creds
|
||||||
|
from tempest import config
|
||||||
|
|
||||||
import os
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
CONF = config.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
TIMESTAMP_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
||||||
|
|
||||||
|
|
||||||
def run_vitrage_command(command, conf):
|
def run_vitrage_command(command):
|
||||||
# AUTH_URL
|
admin_creds = common_creds.get_configured_admin_credentials()
|
||||||
local_ip = '127.0.0.1'
|
|
||||||
try:
|
auth_url = CONF.identity.uri_v3
|
||||||
local_ip = socket.gethostbyname(socket.gethostname())
|
|
||||||
except socket.error:
|
|
||||||
LOG.info("didn't get local ip using default hostname=%s",
|
|
||||||
socket.gethostname())
|
|
||||||
auth_url = get_property_value('OS_AUTH_URL', 'auth_url',
|
|
||||||
'http://%s:5000/v2.0' % local_ip, conf)
|
|
||||||
auth_url_param = '--os-auth-url ' + auth_url
|
auth_url_param = '--os-auth-url ' + auth_url
|
||||||
|
|
||||||
# USERNAME
|
# USERNAME
|
||||||
user = get_property_value('OS_USERNAME', 'username',
|
user = admin_creds.username
|
||||||
'admin', conf)
|
|
||||||
user_param = '--os-user-name ' + user
|
user_param = '--os-user-name ' + user
|
||||||
|
|
||||||
# PASSWORD
|
# PASSWORD
|
||||||
password = get_property_value('OS_PASSWORD', 'password',
|
password = admin_creds.password
|
||||||
'secretadmin', conf)
|
|
||||||
password_param = '--os-password ' + password
|
password_param = '--os-password ' + password
|
||||||
|
|
||||||
# PROJECT_NAME
|
# PROJECT_NAME
|
||||||
project_name = get_property_value('OS_TENANT_NAME', 'project_name',
|
project_name = admin_creds.project_name
|
||||||
'admin', conf)
|
|
||||||
project_name_param = '--os-project-name ' + project_name
|
project_name_param = '--os-project-name ' + project_name
|
||||||
|
|
||||||
# USER_DOMAIN_ID
|
# USER_DOMAIN_ID
|
||||||
user_domain_id = get_property_value('OS_USER_DOMAIN_ID',
|
user_domain_id = admin_creds.user_domain_id
|
||||||
'user_domain_id',
|
|
||||||
'default', conf)
|
|
||||||
user_domain_id_param = '--os-user-domain-id ' + user_domain_id
|
user_domain_id_param = '--os-user-domain-id ' + user_domain_id
|
||||||
|
|
||||||
# PROJECT_DOMAIN_ID
|
# PROJECT_DOMAIN_ID
|
||||||
project_domain_id = get_property_value('OS_PROJECT_DOMAIN_ID',
|
project_domain_id = admin_creds.project_domain_id
|
||||||
'project_domain_id',
|
|
||||||
'default', conf)
|
|
||||||
project_domain_id_par = '--os-project-domain-id ' + project_domain_id
|
project_domain_id_par = '--os-project-domain-id ' + project_domain_id
|
||||||
|
|
||||||
full_command = '%s %s %s %s %s %s %s' % (command, user_param,
|
full_command = '%s %s %s %s %s %s %s' % (command, user_param,
|
||||||
@ -97,19 +84,6 @@ def run_vitrage_command(command, conf):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
def get_property_value(environment_name, conf_name, default_value, conf):
|
|
||||||
if os.environ.get(environment_name):
|
|
||||||
return os.environ[environment_name]
|
|
||||||
|
|
||||||
try:
|
|
||||||
return conf.service_credentials[conf_name]
|
|
||||||
except NoSuchOptError:
|
|
||||||
LOG.debug("Configuration doesn't exist: service_credentials.%s",
|
|
||||||
conf_name)
|
|
||||||
|
|
||||||
return default_value
|
|
||||||
|
|
||||||
|
|
||||||
def uni2str(text):
|
def uni2str(text):
|
||||||
return text.encode('ascii', 'ignore')
|
return text.encode('ascii', 'ignore')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user