From ab2c2817ec8d3a60d7bc61249217107e2b99a18c Mon Sep 17 00:00:00 2001 From: mbeierl Date: Fri, 9 Dec 2016 13:34:35 -0500 Subject: Use v3 Auth Change to detect environment variable and use v3 authentication instead if present. Change-Id: Iada49741b3297f20b740e232b2b35bec92fda91a JIRA: STORPERF-88 Signed-off-by: mbeierl --- storperf/storperf_master.py | 73 +++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 32 deletions(-) (limited to 'storperf/storperf_master.py') diff --git a/storperf/storperf_master.py b/storperf/storperf_master.py index 2975afd..ecf5be6 100644 --- a/storperf/storperf_master.py +++ b/storperf/storperf_master.py @@ -8,22 +8,23 @@ ############################################################################## from datetime import datetime +from storperf.db.configuration_db import ConfigurationDB +from storperf.db.graphite_db import GraphiteDB +from storperf.db.job_db import JobDB +from threading import Thread +from time import sleep import logging import os import socket -from threading import Thread -from time import sleep -import paramiko +from cinderclient import client as cinderclient +from keystoneauth1 import loading +from keystoneauth1 import session from scp import SCPClient +import paramiko -import cinderclient.v2 as cinderclient -import heatclient.client as heatclient -import keystoneclient.v2_0 as ksclient -from storperf.db.configuration_db import ConfigurationDB -from storperf.db.graphite_db import GraphiteDB -from storperf.db.job_db import JobDB from test_executor import TestExecutor +import heatclient.client as heatclient class ParameterError(Exception): @@ -50,13 +51,6 @@ class StorPerfMaster(object): self.logger.debug( "Loaded agent-resource template as: " + self._agent_resource_hot) - self._username = os.environ.get('OS_USERNAME') - self._password = os.environ.get('OS_PASSWORD') - self._tenant_name = os.environ.get('OS_TENANT_NAME') - self._tenant_id = os.environ.get('OS_TENANT_ID') - self._project_name = os.environ.get('OS_PROJECT_NAME') - self._auth_url = os.environ.get('OS_AUTH_URL') - self._cinder_client = None self._heat_client = None self._test_executor = TestExecutor() @@ -161,7 +155,8 @@ class StorPerfMaster(object): @property def volume_quota(self): self._attach_to_openstack() - quotas = self._cinder_client.quotas.get(self._tenant_id) + quotas = self._cinder_client.quotas.get( + os.environ.get('OS_TENANT_NAME')) return int(quotas.volumes) @property @@ -252,6 +247,7 @@ class StorPerfMaster(object): str(self.agent_count) + " > " + str(self.volume_quota) raise ParameterError(message) + self.logger.debug("Creating stack") stack = self._heat_client.stacks.create( stack_name="StorPerfAgentGroup", template=self._agent_group_hot, @@ -394,24 +390,37 @@ class StorPerfMaster(object): time_since_last_auth = datetime.now() - self._last_openstack_auth - if (self._cinder_client is None or + if (self._heat_client is None or time_since_last_auth.total_seconds() > 600): self._last_openstack_auth = datetime.now() - self.logger.debug("Authenticating with OpenStack") + creds = { + "username": os.environ.get('OS_USERNAME'), + "password": os.environ.get('OS_PASSWORD'), + "auth_url": os.environ.get('OS_AUTH_URL'), + "project_name": os.environ.get('OS_PROJECT_NAME'), + "project_id": os.environ.get('OS_PROJECT_ID'), + "tenant_name": os.environ.get('OS_TENANT_NAME'), + "user_domain_id": os.environ.get('OS_USER_DOMAIN_ID') + } + + loader = loading.get_plugin_loader('password') + auth = loader.load_from_options(**creds) + sess = session.Session(auth=auth) - self._cinder_client = cinderclient.Client( - self._username, self._password, self._project_name, - self._auth_url, service_type='volumev2') - self._cinder_client.authenticate() + self.logger.debug("Looking up orchestration endpoint") + heat_endpoint = sess.get_endpoint(auth=auth, + service_type="orchestration", + endpoint_type='publicURL') + + self.logger.debug("Orchestration endpoint is %s" % heat_endpoint) + token = sess.get_token(auth=auth) - self._keystone_client = ksclient.Client( - auth_url=self._auth_url, - username=self._username, - password=self._password, - tenant_name=self._tenant_name) - heat_endpoint = self._keystone_client.service_catalog.url_for( - service_type='orchestration') self._heat_client = heatclient.Client( - '1', endpoint=heat_endpoint, - token=self._keystone_client.auth_token) + "1", + endpoint=heat_endpoint, + token=token) + + self.logger.debug("Creating cinder client") + self._cinder_client = cinderclient.Client("2", session=sess) + self.logger.debug("OpenStack authentication complete") -- cgit 1.2.3-korg