diff --git a/cloudkitty/collector/ceilometer.py b/cloudkitty/collector/ceilometer.py index e61aefb5..8a9f2857 100644 --- a/cloudkitty/collector/ceilometer.py +++ b/cloudkitty/collector/ceilometer.py @@ -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.""" diff --git a/cloudkitty/common/config.py b/cloudkitty/common/config.py index 4266e735..7b7ea3ac 100644 --- a/cloudkitty/common/config.py +++ b/cloudkitty/common/config.py @@ -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( diff --git a/cloudkitty/tenant_fetcher/keystone.py b/cloudkitty/tenant_fetcher/keystone.py index a6480038..86ec23e3 100644 --- a/cloudkitty/tenant_fetcher/keystone.py +++ b/cloudkitty/tenant_fetcher/keystone.py @@ -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] diff --git a/cloudkitty/tests/test_keystone_fetcher.py b/cloudkitty/tests/test_keystone_fetcher.py index 2f27b0f6..63a50d16 100644 --- a/cloudkitty/tests/test_keystone_fetcher.py +++ b/cloudkitty/tests/test_keystone_fetcher.py @@ -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() diff --git a/cloudkitty/tests/test_orchestrator.py b/cloudkitty/tests/test_orchestrator.py index cd9c295f..0e07b925 100644 --- a/cloudkitty/tests/test_orchestrator.py +++ b/cloudkitty/tests/test_orchestrator.py @@ -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() diff --git a/etc/cloudkitty/cloudkitty.conf.sample b/etc/cloudkitty/cloudkitty.conf.sample index 2f307063..a53f1ff8 100644 --- a/etc/cloudkitty/cloudkitty.conf.sample +++ b/etc/cloudkitty/cloudkitty.conf.sample @@ -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]