Update OSDriver to read admin creds from conf
Earlier OpenStackDriver used to query context object for admin credentails, Now it is modified to read from config file as we allow regular tenants also to have context and these tenants can also send request to KB. Blueprint: https://blueprints.launchpad.net/kingbird/+spec/kingbird-openstack-driver Change-Id: I017fc3b9cf35ebd135c0d8e2bc040679cb0577a1
This commit is contained in:
parent
e7b660414f
commit
a14da0d86f
@ -21,11 +21,12 @@ LOG = log.getLogger(__name__)
|
||||
|
||||
class CinderClient(base.DriverBase):
|
||||
'''Cinder V2 driver.'''
|
||||
def __init__(self, context, region=None, token=None):
|
||||
region = region if region else context.region
|
||||
def __init__(self, region, **kwargs):
|
||||
self.cinder_client = ci_client.Client(
|
||||
auth_url=context.auth_url, username=context.user_name,
|
||||
api_key=context.password, tenant_id=context.tenant_id,
|
||||
auth_url=kwargs['auth_url'],
|
||||
username=kwargs['user_name'],
|
||||
api_key=kwargs['password'],
|
||||
tenant_id=kwargs['tenant_id'],
|
||||
region_name=region)
|
||||
|
||||
def get_resource_usages(self, project_id):
|
||||
|
@ -29,11 +29,12 @@ importutils.import_module('keystonemiddleware.auth_token')
|
||||
class KeystoneClient(base.DriverBase):
|
||||
'''Keystone V3 driver.'''
|
||||
|
||||
def __init__(self, context):
|
||||
auth = v3.Password(auth_url=context.auth_url,
|
||||
username=context.user_name,
|
||||
password=context.password,
|
||||
project_name=context.project_name)
|
||||
def __init__(self, **kwargs):
|
||||
auth = v3.Password(
|
||||
auth_url=kwargs['auth_url'],
|
||||
username=kwargs['user_name'],
|
||||
password=kwargs['password'],
|
||||
project_name=kwargs['tenant_name'])
|
||||
sess = session.Session(auth=auth)
|
||||
self.keystone_client = client.Client(session=sess)
|
||||
|
||||
|
@ -22,11 +22,13 @@ API_VERSION = '2.0'
|
||||
|
||||
class NeutronClient(base.DriverBase):
|
||||
'''Neutron V2 driver.'''
|
||||
def __init__(self, context, region=None, token=None):
|
||||
region = region if region else context.region
|
||||
def __init__(self, region, **kwargs):
|
||||
self.neutron_client = client.Client(
|
||||
API_VERSION, username=context.user_name, password=context.password,
|
||||
tenant_name=context.tenant_name, auth_url=context.auth_url,
|
||||
API_VERSION,
|
||||
username=kwargs['user_name'],
|
||||
password=kwargs['password'],
|
||||
tenant_name=kwargs['tenant_name'],
|
||||
auth_url=kwargs['auth_url'],
|
||||
region_name=region)
|
||||
|
||||
def get_resource_usages(self, project_id):
|
||||
|
@ -22,11 +22,11 @@ API_VERSION = '2.1'
|
||||
|
||||
class NovaClient(base.DriverBase):
|
||||
'''Nova V2.1 driver.'''
|
||||
def __init__(self, context, region=None, token=None):
|
||||
region = region if region else context.region
|
||||
def __init__(self, region, **kwargs):
|
||||
self.nova_client = nv_client.Client(
|
||||
API_VERSION, context.user_name, context.password,
|
||||
context.tenant_name, context.auth_url, region_name=region)
|
||||
API_VERSION, kwargs['user_name'],
|
||||
kwargs['password'], kwargs['tenant_name'],
|
||||
kwargs['auth_url'], region_name=region)
|
||||
|
||||
def get_resource_usages(self, project_id):
|
||||
'''Calcualte resources usage and return the dict'''
|
||||
|
@ -27,14 +27,48 @@ from kingbird.drivers.openstack.keystone_v3 import KeystoneClient
|
||||
from kingbird.drivers.openstack.neutron_v2 import NeutronClient
|
||||
from kingbird.drivers.openstack.nova_v2 import NovaClient
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
admin_creds_opts = [
|
||||
cfg.StrOpt('auth_url',
|
||||
default='http://127.0.0.1:5000/v3',
|
||||
help='keystone authorization url'),
|
||||
cfg.StrOpt('identity_url',
|
||||
default='http://127.0.0.1:35357/v3',
|
||||
help='keystone service url'),
|
||||
cfg.StrOpt('admin_username',
|
||||
help='username of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True'),
|
||||
cfg.StrOpt('admin_password',
|
||||
help='password of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True'),
|
||||
cfg.StrOpt('admin_tenant',
|
||||
help='tenant name of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True'),
|
||||
cfg.StrOpt('admin_tenant_id',
|
||||
help='tenant name of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True'),
|
||||
cfg.StrOpt('admin_user_domain_name',
|
||||
default='Default',
|
||||
help='user domain name of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True'),
|
||||
cfg.StrOpt('admin_tenant_domain_name',
|
||||
default='Default',
|
||||
help='tenant domain name of admin account, needed when'
|
||||
' auto_refresh_endpoint set to True')
|
||||
]
|
||||
admin_creds_opt_group = cfg.OptGroup('admin_creds')
|
||||
cfg.CONF.register_group(admin_creds_opt_group)
|
||||
cfg.CONF.register_opts(admin_creds_opts, group=admin_creds_opt_group)
|
||||
|
||||
|
||||
class OpenStackDriver(object):
|
||||
|
||||
os_clients_dict = collections.defaultdict(dict)
|
||||
|
||||
def __init__(self, ctx, region_name=None, token=None):
|
||||
def __init__(self, region_name):
|
||||
# Check if objects are cached and try to use those
|
||||
self.region_name = region_name
|
||||
if region_name in OpenStackDriver.os_clients_dict:
|
||||
@ -48,9 +82,16 @@ class OpenStackDriver(object):
|
||||
else:
|
||||
# Create new objects and cache them
|
||||
LOG.debug(_("Creating fresh OS Clients objects"))
|
||||
self.nova_client = NovaClient(ctx, region_name, token)
|
||||
self.cinder_client = CinderClient(ctx, region_name, token)
|
||||
self.neutron_client = NeutronClient(ctx, region_name, token)
|
||||
admin_kwargs = {
|
||||
'user_name': cfg.CONF.admin_creds.admin_username,
|
||||
'password': cfg.CONF.admin_creds.admin_password,
|
||||
'tenant_name': cfg.CONF.admin_creds.admin_tenant,
|
||||
'auth_url': cfg.CONF.admin_creds.auth_url,
|
||||
'tenant_id': cfg.CONF.admin_creds.admin_tenant_id
|
||||
}
|
||||
self.nova_client = NovaClient(region_name, **admin_kwargs)
|
||||
self.cinder_client = CinderClient(region_name, **admin_kwargs)
|
||||
self.neutron_client = NeutronClient(region_name, **admin_kwargs)
|
||||
OpenStackDriver.os_clients_dict[
|
||||
region_name] = collections.defaultdict(dict)
|
||||
OpenStackDriver.os_clients_dict[region_name][
|
||||
@ -62,7 +103,7 @@ class OpenStackDriver(object):
|
||||
if 'keystone' in OpenStackDriver.os_clients_dict:
|
||||
self.keystone_client = OpenStackDriver.os_clients_dict['keystone']
|
||||
else:
|
||||
self.keystone_client = KeystoneClient(ctx)
|
||||
self.keystone_client = KeystoneClient(**admin_kwargs)
|
||||
OpenStackDriver.os_clients_dict['keystone'] = self.keystone_client
|
||||
|
||||
def get_enabled_projects(self):
|
||||
|
@ -16,6 +16,13 @@ from kingbird.drivers.openstack import cinder_v2
|
||||
from kingbird.tests import base
|
||||
from kingbird.tests import utils
|
||||
|
||||
FAKE_ADMIN_CREDS = {
|
||||
'user_name': 'fake_user',
|
||||
'password': 'pass1234',
|
||||
'tenant_id': '392847',
|
||||
'auth_url': 'http://127.0.0.1:5000/v3'
|
||||
}
|
||||
|
||||
|
||||
class TestCinderClient(base.KingbirdTestCase):
|
||||
def setUp(self):
|
||||
@ -23,7 +30,7 @@ class TestCinderClient(base.KingbirdTestCase):
|
||||
self.ctx = utils.dummy_context()
|
||||
|
||||
def test_init(self):
|
||||
ci_client = cinder_v2.CinderClient(self.ctx, 'fake_region')
|
||||
ci_client = cinder_v2.CinderClient('fake_region', **FAKE_ADMIN_CREDS)
|
||||
self.assertIsNotNone(ci_client)
|
||||
self.assertIsInstance(ci_client.cinder_client,
|
||||
cinderclient.v2.client.Client)
|
||||
|
@ -18,6 +18,13 @@ from kingbird.drivers.openstack import keystone_v3
|
||||
from kingbird.tests import base
|
||||
from kingbird.tests import utils
|
||||
|
||||
FAKE_ADMIN_CREDS = {
|
||||
'user_name': 'fake_user',
|
||||
'password': 'pass1234',
|
||||
'tenant_name': 'test_tenant',
|
||||
'auth_url': 'http://127.0.0.1:5000/v3'
|
||||
}
|
||||
|
||||
|
||||
class TestKeystoneClient(base.KingbirdTestCase):
|
||||
def setUp(self):
|
||||
@ -25,7 +32,7 @@ class TestKeystoneClient(base.KingbirdTestCase):
|
||||
self.ctx = utils.dummy_context()
|
||||
|
||||
def test_init(self):
|
||||
key_client = keystone_v3.KeystoneClient(self.ctx)
|
||||
key_client = keystone_v3.KeystoneClient(**FAKE_ADMIN_CREDS)
|
||||
self.assertIsNotNone(key_client.keystone_client)
|
||||
self.assertIsInstance(key_client.keystone_client,
|
||||
keystoneclient.v3.client.Client)
|
||||
|
@ -16,6 +16,13 @@ from kingbird.drivers.openstack import neutron_v2
|
||||
from kingbird.tests import base
|
||||
from kingbird.tests import utils
|
||||
|
||||
FAKE_ADMIN_CREDS = {
|
||||
'user_name': 'fake_user',
|
||||
'password': 'pass1234',
|
||||
'tenant_name': 'test_tenant',
|
||||
'auth_url': 'http://127.0.0.1:5000/v3'
|
||||
}
|
||||
|
||||
|
||||
class TestNeutronClient(base.KingbirdTestCase):
|
||||
def setUp(self):
|
||||
@ -23,7 +30,8 @@ class TestNeutronClient(base.KingbirdTestCase):
|
||||
self.ctx = utils.dummy_context()
|
||||
|
||||
def test_init(self):
|
||||
neutron_client = neutron_v2.NeutronClient(self.ctx, 'fake_region')
|
||||
neutron_client = neutron_v2.NeutronClient('fake_region',
|
||||
**FAKE_ADMIN_CREDS)
|
||||
self.assertIsNotNone(neutron_client)
|
||||
self.assertIsInstance(neutron_client.neutron_client,
|
||||
neutronclient.v2_0.client.Client)
|
||||
|
@ -16,6 +16,13 @@ from kingbird.drivers.openstack import nova_v2
|
||||
from kingbird.tests import base
|
||||
from kingbird.tests import utils
|
||||
|
||||
FAKE_ADMIN_CREDS = {
|
||||
'user_name': 'fake_user',
|
||||
'password': 'pass1234',
|
||||
'tenant_name': 'test_tenant',
|
||||
'auth_url': 'http://127.0.0.1:5000/v3'
|
||||
}
|
||||
|
||||
|
||||
class TestNovaClient(base.KingbirdTestCase):
|
||||
def setUp(self):
|
||||
@ -23,7 +30,7 @@ class TestNovaClient(base.KingbirdTestCase):
|
||||
self.ctx = utils.dummy_context()
|
||||
|
||||
def test_init(self):
|
||||
nv_client = nova_v2.NovaClient(self.ctx, 'fake_region')
|
||||
nv_client = nova_v2.NovaClient('fake_region', **FAKE_ADMIN_CREDS)
|
||||
self.assertIsNotNone(nv_client)
|
||||
self.assertIsInstance(nv_client.nova_client,
|
||||
novaclient.v2.client.Client)
|
||||
|
@ -33,7 +33,7 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
@mock.patch.object(sdk, 'KeystoneClient')
|
||||
def test_init(self, mock_keystone_client, mock_cinder_client,
|
||||
mock_neutron_client, mock_nova_client):
|
||||
os_driver = sdk.OpenStackDriver(self.context, 'fake_region_1', None)
|
||||
os_driver = sdk.OpenStackDriver('fake_region_1')
|
||||
self.assertIsNotNone(os_driver.neutron_client)
|
||||
self.assertIsNotNone(os_driver.nova_client)
|
||||
self.assertIsNotNone(os_driver.keystone_client)
|
||||
@ -47,7 +47,7 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
mock_cinder_client, mock_neutron_client,
|
||||
mock_nova_client):
|
||||
project_id = 'fake_project'
|
||||
os_driver = sdk.OpenStackDriver(self.context, 'fake_region_2')
|
||||
os_driver = sdk.OpenStackDriver('fake_region_2')
|
||||
total_quotas = os_driver.get_resource_usages(project_id)
|
||||
mock_nova_client().get_resource_usages.assert_called_once_with(
|
||||
project_id)
|
||||
@ -69,7 +69,7 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
write_limits['nova'] = {'ram': 1222, 'vcpus': 10, 'instances': 7}
|
||||
write_limits['cinder'] = {'disk': 1222}
|
||||
write_limits['neutron'] = {'network': 10, 'subnet': 10}
|
||||
os_driver = sdk.OpenStackDriver(self.context, 'fake_region_3')
|
||||
os_driver = sdk.OpenStackDriver('fake_region_3')
|
||||
os_driver.write_quota_limits(project_id, write_limits)
|
||||
mock_nova_client(
|
||||
).update_quota_limits.assert_called_once_with(project_id,
|
||||
@ -89,7 +89,7 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
mock_network_client, mock_nova_client,
|
||||
mock_keystone_client):
|
||||
project_id = 'fake_project'
|
||||
os_driver = sdk.OpenStackDriver(self.context, 'fake_region_4', None)
|
||||
os_driver = sdk.OpenStackDriver('fake_region_4')
|
||||
os_driver.delete_quota_limits(project_id)
|
||||
mock_nova_client().delete_quota_limits.assert_called_once_with(
|
||||
project_id)
|
||||
@ -106,7 +106,7 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
mock_network_client, mock_nova_client,
|
||||
mock_keystone_client):
|
||||
input_project_list = ['project_1', 'project_2', 'project_3']
|
||||
os_driver = sdk.OpenStackDriver(self.context, 'fake_region_5', None)
|
||||
os_driver = sdk.OpenStackDriver('fake_region_5')
|
||||
os_driver.keystone_client.get_enabled_projects.return_value = \
|
||||
input_project_list
|
||||
output_project_list = os_driver.get_enabled_projects()
|
||||
@ -119,10 +119,10 @@ class TestOpenStackDriver(base.KingbirdTestCase):
|
||||
def test_cache_os_clients(self, mock_cinder_client,
|
||||
mock_network_client, mock_nova_client,
|
||||
mock_keystone_client):
|
||||
os_driver_1 = sdk.OpenStackDriver(self.context, 'RegionOne', None)
|
||||
os_driver_2 = sdk.OpenStackDriver(self.context, 'RegionTwo', None)
|
||||
os_driver_3 = sdk.OpenStackDriver(self.context, 'RegionOne', None)
|
||||
os_driver_4 = sdk.OpenStackDriver(self.context, 'RegionTwo', None)
|
||||
os_driver_1 = sdk.OpenStackDriver('RegionOne')
|
||||
os_driver_2 = sdk.OpenStackDriver('RegionTwo')
|
||||
os_driver_3 = sdk.OpenStackDriver('RegionOne')
|
||||
os_driver_4 = sdk.OpenStackDriver('RegionTwo')
|
||||
# assert equal for same region clients objects to test caching
|
||||
self.assertEqual(os_driver_1.nova_client, os_driver_3.nova_client)
|
||||
self.assertEqual(os_driver_1.cinder_client, os_driver_3.cinder_client)
|
||||
|
Loading…
Reference in New Issue
Block a user