Merge "Fix nova proxy admin login"
This commit is contained in:
commit
7fbe598884
|
@ -366,6 +366,8 @@ common_opts = [
|
||||||
help="Admin tenant ID used to connect to Nova.", secret=True),
|
help="Admin tenant ID used to connect to Nova.", secret=True),
|
||||||
cfg.StrOpt('nova_proxy_admin_tenant_name', default='',
|
cfg.StrOpt('nova_proxy_admin_tenant_name', default='',
|
||||||
help="Admin tenant name used to connect to Nova.", secret=True),
|
help="Admin tenant name used to connect to Nova.", secret=True),
|
||||||
|
cfg.StrOpt('nova_proxy_admin_user_domain_name', default='Default',
|
||||||
|
help="User domain of the admin user used to connect to Nova."),
|
||||||
cfg.StrOpt('network_label_regex', default='^private$',
|
cfg.StrOpt('network_label_regex', default='^private$',
|
||||||
help='Regular expression to match Trove network labels.'),
|
help='Regular expression to match Trove network labels.'),
|
||||||
cfg.StrOpt('ip_regex', default=None,
|
cfg.StrOpt('ip_regex', default=None,
|
||||||
|
|
|
@ -84,11 +84,11 @@ def guest_client(context, id, manager=None):
|
||||||
return clazz(context, id)
|
return clazz(context, id)
|
||||||
|
|
||||||
|
|
||||||
def nova_client(context, region_name=None):
|
def nova_client(context, region_name=None, password=None):
|
||||||
if CONF.nova_compute_url:
|
if CONF.nova_compute_url:
|
||||||
url = '%(nova_url)s%(tenant)s' % {
|
url = '%(nova_url)s%(tenant)s' % {
|
||||||
'nova_url': normalize_url(CONF.nova_compute_url),
|
'nova_url': normalize_url(CONF.nova_compute_url),
|
||||||
'tenant': context.tenant}
|
'tenant': context.project_id}
|
||||||
else:
|
else:
|
||||||
url = get_endpoint(context.service_catalog,
|
url = get_endpoint(context.service_catalog,
|
||||||
service_type=CONF.nova_compute_service_type,
|
service_type=CONF.nova_compute_service_type,
|
||||||
|
@ -97,9 +97,11 @@ def nova_client(context, region_name=None):
|
||||||
|
|
||||||
client = Client(CONF.nova_client_version,
|
client = Client(CONF.nova_client_version,
|
||||||
username=context.user,
|
username=context.user,
|
||||||
|
password=password,
|
||||||
endpoint_override=url,
|
endpoint_override=url,
|
||||||
project_id=context.tenant,
|
project_id=context.project_id,
|
||||||
project_domain_name=context.project_domain_name,
|
project_domain_name=context.project_domain_name,
|
||||||
|
user_domain_name=context.user_domain_name,
|
||||||
auth_url=CONF.trove_auth_url,
|
auth_url=CONF.trove_auth_url,
|
||||||
auth_token=context.auth_token,
|
auth_token=context.auth_token,
|
||||||
insecure=CONF.nova_api_insecure)
|
insecure=CONF.nova_api_insecure)
|
||||||
|
@ -113,7 +115,7 @@ def create_admin_nova_client(context):
|
||||||
Creates client that uses trove admin credentials
|
Creates client that uses trove admin credentials
|
||||||
:return: a client for nova for the trove admin
|
:return: a client for nova for the trove admin
|
||||||
"""
|
"""
|
||||||
client = create_nova_client(context)
|
client = create_nova_client(context, password=CONF.nova_proxy_admin_pass)
|
||||||
return client
|
return client
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,8 @@ class Manager(periodic_task.PeriodicTasks):
|
||||||
super(Manager, self).__init__(CONF)
|
super(Manager, self).__init__(CONF)
|
||||||
self.admin_context = TroveContext(
|
self.admin_context = TroveContext(
|
||||||
user=CONF.nova_proxy_admin_user,
|
user=CONF.nova_proxy_admin_user,
|
||||||
auth_token=CONF.nova_proxy_admin_pass,
|
tenant=CONF.nova_proxy_admin_tenant_id,
|
||||||
tenant=CONF.nova_proxy_admin_tenant_id)
|
user_domain_name=CONF.nova_proxy_admin_user_domain_name)
|
||||||
if CONF.exists_notification_transformer:
|
if CONF.exists_notification_transformer:
|
||||||
self.exists_transformer = importutils.import_object(
|
self.exists_transformer = importutils.import_object(
|
||||||
CONF.exists_notification_transformer,
|
CONF.exists_notification_transformer,
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#
|
#
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from mock import patch, MagicMock
|
from mock import ANY, patch, MagicMock
|
||||||
import swiftclient.client
|
import swiftclient.client
|
||||||
from testtools import ExpectedException, matchers
|
from testtools import ExpectedException, matchers
|
||||||
|
|
||||||
|
@ -363,6 +363,7 @@ class TestCreateNovaClient(trove_testtools.TestCase):
|
||||||
cfg.CONF.clear_override('nova_compute_url')
|
cfg.CONF.clear_override('nova_compute_url')
|
||||||
cfg.CONF.clear_override('nova_compute_service_type')
|
cfg.CONF.clear_override('nova_compute_service_type')
|
||||||
cfg.CONF.clear_override('os_region_name')
|
cfg.CONF.clear_override('os_region_name')
|
||||||
|
cfg.CONF.clear_override('nova_proxy_admin_pass')
|
||||||
|
|
||||||
def test_create_with_no_conf_no_catalog(self):
|
def test_create_with_no_conf_no_catalog(self):
|
||||||
self.assertRaises(exception.EmptyCatalog,
|
self.assertRaises(exception.EmptyCatalog,
|
||||||
|
@ -417,6 +418,30 @@ class TestCreateNovaClient(trove_testtools.TestCase):
|
||||||
self.assertEqual('%s%s' % (nova_url_from_conf, admin_tenant_id),
|
self.assertEqual('%s%s' % (nova_url_from_conf, admin_tenant_id),
|
||||||
admin_client.client.endpoint_override)
|
admin_client.client.endpoint_override)
|
||||||
|
|
||||||
|
@patch('trove.common.remote.Client', autospec=True)
|
||||||
|
def test_nova_client_password_passthrough(self, nova_mock):
|
||||||
|
test_domain = 'test_domain_name'
|
||||||
|
ctx = TroveContext(user='admin1',
|
||||||
|
project_id='project_id',
|
||||||
|
user_domain_name=test_domain,
|
||||||
|
service_catalog=self.service_catalog)
|
||||||
|
remote.nova_client(ctx, password='adminpass')
|
||||||
|
nova_mock.assert_called_with(ANY, username='admin1',
|
||||||
|
password='adminpass',
|
||||||
|
user_domain_name=test_domain,
|
||||||
|
project_id='project_id',
|
||||||
|
auth_token=None,
|
||||||
|
auth_url=ANY,
|
||||||
|
endpoint_override=ANY,
|
||||||
|
project_domain_name=ANY,
|
||||||
|
insecure=False)
|
||||||
|
|
||||||
|
@patch('trove.common.remote.create_nova_client', autospec=True)
|
||||||
|
def test_admin_client_password(self, nc_mock):
|
||||||
|
cfg.CONF.set_override('nova_proxy_admin_pass', 's3cr3t3')
|
||||||
|
remote.create_admin_nova_client('mycontext')
|
||||||
|
nc_mock.assert_called_with('mycontext', password='s3cr3t3')
|
||||||
|
|
||||||
|
|
||||||
class TestCreateSwiftClient(trove_testtools.TestCase):
|
class TestCreateSwiftClient(trove_testtools.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
Loading…
Reference in New Issue