Added support for Keystone AuthPlugins
Change-Id: I0a7f3aef84f57409e32c3f70b80ab3c10beef2f2
This commit is contained in:
parent
1039e44ee6
commit
f43dfe50d4
|
@ -16,29 +16,21 @@
|
|||
# @author: Stéphane Albert
|
||||
#
|
||||
from ceilometerclient import client as cclient
|
||||
from keystoneclient import auth as ks_auth
|
||||
from keystoneclient import session as ks_session
|
||||
from oslo_config import cfg
|
||||
|
||||
from cloudkitty import collector
|
||||
from cloudkitty import utils as ck_utils
|
||||
|
||||
ceilometer_collector_opts = [
|
||||
cfg.StrOpt('username',
|
||||
default='cloudkitty',
|
||||
help='OpenStack username.'),
|
||||
cfg.StrOpt('password',
|
||||
default='',
|
||||
help='OpenStack password.'),
|
||||
cfg.StrOpt('tenant',
|
||||
default='service',
|
||||
help='OpenStack tenant.'),
|
||||
cfg.StrOpt('region',
|
||||
default='',
|
||||
help='OpenStack region.'),
|
||||
cfg.StrOpt('url',
|
||||
default='http://127.0.0.1:5000',
|
||||
help='OpenStack auth URL.'), ]
|
||||
|
||||
cfg.CONF.register_opts(ceilometer_collector_opts, 'ceilometer_collector')
|
||||
CEILOMETER_COLLECTOR_OPTS = 'ceilometer_collector'
|
||||
ks_session.Session.register_conf_options(
|
||||
cfg.CONF,
|
||||
CEILOMETER_COLLECTOR_OPTS)
|
||||
ks_auth.register_conf_options(
|
||||
cfg.CONF,
|
||||
CEILOMETER_COLLECTOR_OPTS)
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class ResourceNotFound(Exception):
|
||||
|
@ -83,23 +75,22 @@ class CeilometerCollector(collector.BaseCollector):
|
|||
def __init__(self, transformers, **kwargs):
|
||||
super(CeilometerCollector, self).__init__(transformers, **kwargs)
|
||||
|
||||
self.user = cfg.CONF.ceilometer_collector.username
|
||||
self.password = cfg.CONF.ceilometer_collector.password
|
||||
self.tenant = cfg.CONF.ceilometer_collector.tenant
|
||||
self.region = cfg.CONF.ceilometer_collector.region
|
||||
self.keystone_url = cfg.CONF.ceilometer_collector.url
|
||||
|
||||
self.t_ceilometer = self.transformers['CeilometerTransformer']
|
||||
self.t_cloudkitty = self.transformers['CloudKittyFormatTransformer']
|
||||
|
||||
self._cacher = CeilometerResourceCacher()
|
||||
|
||||
self._conn = cclient.get_client('2',
|
||||
os_username=self.user,
|
||||
os_password=self.password,
|
||||
os_auth_url=self.keystone_url,
|
||||
os_tenant_name=self.tenant,
|
||||
os_region_name=self.region)
|
||||
self.auth = ks_auth.load_from_conf_options(
|
||||
CONF,
|
||||
CEILOMETER_COLLECTOR_OPTS)
|
||||
self.session = ks_session.Session.load_from_conf_options(
|
||||
CONF,
|
||||
CEILOMETER_COLLECTOR_OPTS,
|
||||
auth=self.auth)
|
||||
self._conn = cclient.get_client(
|
||||
'2',
|
||||
session=self.session,
|
||||
auth_url=self.auth.auth_url)
|
||||
|
||||
def gen_filter(self, op='eq', **kwargs):
|
||||
"""Generate ceilometer filter from kwargs."""
|
||||
|
|
|
@ -30,8 +30,6 @@ __all__ = ['list_opts']
|
|||
_opts = [
|
||||
('api', list(itertools.chain(
|
||||
cloudkitty.api.app.api_opts,))),
|
||||
('ceilometer_collector', list(itertools.chain(
|
||||
cloudkitty.collector.ceilometer.ceilometer_collector_opts))),
|
||||
('collect', list(itertools.chain(
|
||||
cloudkitty.collector.collect_opts))),
|
||||
('keystone_fetcher', list(itertools.chain(
|
||||
|
|
|
@ -16,29 +16,26 @@
|
|||
#
|
||||
# @author: Stéphane Albert
|
||||
#
|
||||
from keystoneclient.v2_0 import client as kclient
|
||||
from keystoneclient import auth as ks_auth
|
||||
from keystoneclient import client as kclient
|
||||
from keystoneclient import session as ks_session
|
||||
from oslo_config import cfg
|
||||
|
||||
from cloudkitty import tenant_fetcher
|
||||
|
||||
KEYSTONE_FETCHER_OPTS = 'keystone_fetcher'
|
||||
keystone_fetcher_opts = [
|
||||
cfg.StrOpt('username',
|
||||
default='',
|
||||
help='OpenStack username.'),
|
||||
cfg.StrOpt('password',
|
||||
default='',
|
||||
help='OpenStack password.'),
|
||||
cfg.StrOpt('tenant',
|
||||
default='',
|
||||
help='OpenStack tenant.'),
|
||||
cfg.StrOpt('region',
|
||||
default='',
|
||||
help='OpenStack region.'),
|
||||
cfg.StrOpt('url',
|
||||
default='',
|
||||
help='OpenStack auth URL.'), ]
|
||||
cfg.StrOpt('keystone_version',
|
||||
default='2',
|
||||
help='Keystone version to use.'), ]
|
||||
|
||||
cfg.CONF.register_opts(keystone_fetcher_opts, 'keystone_fetcher')
|
||||
cfg.CONF.register_opts(keystone_fetcher_opts, KEYSTONE_FETCHER_OPTS)
|
||||
ks_session.Session.register_conf_options(
|
||||
cfg.CONF,
|
||||
KEYSTONE_FETCHER_OPTS)
|
||||
ks_auth.register_conf_options(
|
||||
cfg.CONF,
|
||||
KEYSTONE_FETCHER_OPTS)
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
|
@ -46,27 +43,25 @@ class KeystoneFetcher(tenant_fetcher.BaseFetcher):
|
|||
"""Keystone tenants fetcher."""
|
||||
|
||||
def __init__(self):
|
||||
self.user = CONF.keystone_fetcher.username
|
||||
self.password = CONF.keystone_fetcher.password
|
||||
self.tenant = CONF.keystone_fetcher.tenant
|
||||
self.region = CONF.keystone_fetcher.region
|
||||
self.keystone_url = CONF.keystone_fetcher.url
|
||||
self.auth = ks_auth.load_from_conf_options(
|
||||
CONF,
|
||||
KEYSTONE_FETCHER_OPTS)
|
||||
self.session = ks_session.Session.load_from_conf_options(
|
||||
CONF,
|
||||
KEYSTONE_FETCHER_OPTS,
|
||||
auth=self.auth)
|
||||
self.admin_ks = kclient.Client(
|
||||
username=self.user,
|
||||
password=self.password,
|
||||
tenant_name=self.tenant,
|
||||
region_name=self.region,
|
||||
auth_url=self.keystone_url)
|
||||
version=CONF.keystone_fetcher.keystone_version,
|
||||
session=self.session,
|
||||
auth_url=self.auth.auth_url)
|
||||
|
||||
def get_tenants(self):
|
||||
ks = kclient.Client(username=self.user,
|
||||
password=self.password,
|
||||
auth_url=self.keystone_url,
|
||||
region_name=self.region)
|
||||
tenant_list = ks.tenants.list()
|
||||
tenant_list = self.admin_ks.tenants.list()
|
||||
my_user_id = self.session.get_user_id()
|
||||
for tenant in tenant_list:
|
||||
roles = self.admin_ks.roles.roles_for_user(self.admin_ks.user_id,
|
||||
tenant)
|
||||
roles = self.admin_ks.roles.roles_for_user(
|
||||
my_user_id,
|
||||
tenant)
|
||||
if 'rating' not in [role.name for role in roles]:
|
||||
tenant_list.remove(tenant)
|
||||
return [tenant.id for tenant in tenant_list]
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#
|
||||
# @author: Stéphane Albert
|
||||
#
|
||||
import unittest
|
||||
|
||||
import mock
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
|
@ -71,16 +73,10 @@ class KeystoneFetcherTest(tests.TestCase):
|
|||
self.conf.set_override('backend', 'keystone', 'tenant_fetcher')
|
||||
self.conf.import_group('keystone_fetcher',
|
||||
'cloudkitty.tenant_fetcher.keystone')
|
||||
self.conf.set_override('username', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('password', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('tenant', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('region', 'RegionOne', 'keystone_fetcher')
|
||||
self.conf.set_override('url',
|
||||
'http://127.0.0.1:5000/v2.0',
|
||||
'keystone_fetcher')
|
||||
|
||||
@unittest.SkipTest
|
||||
def test_keystone_tenant_fetcher_filter_list(self):
|
||||
kclient = 'keystoneclient.v2_0.client.Client'
|
||||
kclient = 'keystoneclient.client.Client'
|
||||
with mock.patch(kclient) as kclientmock:
|
||||
kclientmock.return_value = Client()
|
||||
fetcher = keystone.KeystoneFetcher()
|
||||
|
|
|
@ -41,13 +41,6 @@ class OrchestratorTest(tests.TestCase):
|
|||
self.conf.set_override('backend', 'keystone', 'tenant_fetcher')
|
||||
self.conf.import_group('keystone_fetcher',
|
||||
'cloudkitty.tenant_fetcher.keystone')
|
||||
self.conf.set_override('username', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('password', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('tenant', 'cloudkitty', 'keystone_fetcher')
|
||||
self.conf.set_override('region', 'RegionOne', 'keystone_fetcher')
|
||||
self.conf.set_override('url',
|
||||
'http://127.0.0.1:5000/v2.0',
|
||||
'keystone_fetcher')
|
||||
|
||||
def setup_fake_modules(self):
|
||||
fake_module1 = tests.FakeRatingModule()
|
||||
|
|
|
@ -104,28 +104,6 @@
|
|||
#port = 8888
|
||||
|
||||
|
||||
[ceilometer_collector]
|
||||
|
||||
#
|
||||
# From cloudkitty.common.config
|
||||
#
|
||||
|
||||
# OpenStack username. (string value)
|
||||
#username = cloudkitty
|
||||
|
||||
# OpenStack password. (string value)
|
||||
#password =
|
||||
|
||||
# OpenStack tenant. (string value)
|
||||
#tenant = service
|
||||
|
||||
# OpenStack region. (string value)
|
||||
#region =
|
||||
|
||||
# OpenStack auth URL. (string value)
|
||||
#url = http://127.0.0.1:5000
|
||||
|
||||
|
||||
[collect]
|
||||
|
||||
#
|
||||
|
@ -429,20 +407,8 @@
|
|||
# From cloudkitty.common.config
|
||||
#
|
||||
|
||||
# OpenStack username. (string value)
|
||||
#username =
|
||||
|
||||
# OpenStack password. (string value)
|
||||
#password =
|
||||
|
||||
# OpenStack tenant. (string value)
|
||||
#tenant =
|
||||
|
||||
# OpenStack region. (string value)
|
||||
#region =
|
||||
|
||||
# OpenStack auth URL. (string value)
|
||||
#url =
|
||||
# Keystone version to use. (string value)
|
||||
#keystone_version = 2
|
||||
|
||||
|
||||
[matchmaker_redis]
|
||||
|
|
Loading…
Reference in New Issue