diff options
author | Hisashi Osanai <osanai.hisashi@jp.fujitsu.com> | 2014-08-08 14:30:43 +0900 |
---|---|---|
committer | Hisashi Osanai <osanai.hisashi@jp.fujitsu.com> | 2014-09-19 17:23:52 +0900 |
commit | 72d65777962a2b93e80f7e17ce6602caa6a79bed (patch) | |
tree | 83e4e2f01628078b0d6724cec9a73adf3fc61241 | |
parent | 7b89798be3b81259a0440dec928cb11cccb7158d (diff) | |
download | ceilometer-72d65777962a2b93e80f7e17ce6602caa6a79bed.tar.gz |
Enable to get service types from configuration file
When services are registered to keystone without using default
service types, pollsters for the services don't work. This fix
enables the pollsters to get service types from ceilometer.conf.
If there is no entry in the file, the default service types
will be used.
Change-Id: Iab30b6e749f5d2af4ecb0bbf6fe1a137793f4c2c
Closes-Bug: 1353356
DocImpact: Add new parameters in ceilometer.conf
-rw-r--r-- | ceilometer/energy/kwapi.py | 12 | ||||
-rw-r--r-- | ceilometer/image/glance.py | 9 | ||||
-rw-r--r-- | ceilometer/network/floatingip.py | 7 | ||||
-rw-r--r-- | ceilometer/network/services/discovery.py | 21 | ||||
-rw-r--r-- | ceilometer/neutron_client.py | 11 | ||||
-rw-r--r-- | ceilometer/nova_client.py | 11 | ||||
-rw-r--r-- | ceilometer/objectstore/swift.py | 16 | ||||
-rw-r--r-- | ceilometer/tests/energy/test_kwapi.py | 8 | ||||
-rw-r--r-- | ceilometer/tests/image/test_glance.py | 4 | ||||
-rw-r--r-- | ceilometer/tests/network/test_floatingip.py | 3 | ||||
-rw-r--r-- | doc/source/configuration.rst | 17 |
11 files changed, 102 insertions, 17 deletions
diff --git a/ceilometer/energy/kwapi.py b/ceilometer/energy/kwapi.py index a77f3f49..8eb9a333 100644 --- a/ceilometer/energy/kwapi.py +++ b/ceilometer/energy/kwapi.py @@ -17,6 +17,7 @@ import datetime from keystoneclient import exceptions +from oslo.config import cfg import requests import six @@ -25,8 +26,17 @@ from ceilometer.openstack.common.gettextutils import _ from ceilometer.openstack.common import log from ceilometer import sample + LOG = log.getLogger(__name__) +service_types_opts = [ + cfg.StrOpt('kwapi', + default='energy', + help='Kwapi service type.'), +] + +cfg.CONF.register_opts(service_types_opts, group='service_types') + class KwapiClient(object): """Kwapi API client.""" @@ -56,7 +66,7 @@ class _Base(plugin.CentralPollster): @property def default_discovery(self): - return 'endpoint:energy' + return 'endpoint:%s' % cfg.CONF.service_types.kwapi @staticmethod def get_kwapi_client(ksclient, endpoint): diff --git a/ceilometer/image/glance.py b/ceilometer/image/glance.py index 4868afd8..d444f489 100644 --- a/ceilometer/image/glance.py +++ b/ceilometer/image/glance.py @@ -39,14 +39,21 @@ OPTS = [ "(default value in glanceclient is used)."), ] +service_types_opts = [ + cfg.StrOpt('glance', + default='image', + help='Glance service type.'), +] + cfg.CONF.register_opts(OPTS) +cfg.CONF.register_opts(service_types_opts, group='service_types') class _Base(plugin.CentralPollster): @property def default_discovery(self): - return 'endpoint:image' + return 'endpoint:%s' % cfg.CONF.service_types.glance @staticmethod def get_glance_client(ksclient, endpoint): diff --git a/ceilometer/network/floatingip.py b/ceilometer/network/floatingip.py index 4ea1c67d..132e0fe7 100644 --- a/ceilometer/network/floatingip.py +++ b/ceilometer/network/floatingip.py @@ -17,6 +17,8 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + +from oslo.config import cfg from oslo.utils import timeutils from ceilometer.central import plugin @@ -25,8 +27,11 @@ from ceilometer.openstack.common.gettextutils import _ from ceilometer.openstack.common import log from ceilometer import sample + LOG = log.getLogger(__name__) +cfg.CONF.import_group('service_types', 'ceilometer.nova_client') + class FloatingIPPollster(plugin.CentralPollster): @@ -43,7 +48,7 @@ class FloatingIPPollster(plugin.CentralPollster): @property def default_discovery(self): - return 'endpoint:compute' + return 'endpoint:%s' % cfg.CONF.service_types.nova def get_samples(self, manager, cache, resources): for endpoint in resources: diff --git a/ceilometer/network/services/discovery.py b/ceilometer/network/services/discovery.py index 87e646de..55df01f5 100644 --- a/ceilometer/network/services/discovery.py +++ b/ceilometer/network/services/discovery.py @@ -15,11 +15,16 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo.config import cfg + from ceilometer.central import plugin from ceilometer import neutron_client from ceilometer import plugin as base_plugin +cfg.CONF.import_group('service_types', 'ceilometer.neutron_client') + + class _BaseServicesDiscovery(base_plugin.DiscoveryBase): def __init__(self): @@ -28,7 +33,7 @@ class _BaseServicesDiscovery(base_plugin.DiscoveryBase): class LBPoolsDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -38,7 +43,7 @@ class LBPoolsDiscovery(_BaseServicesDiscovery): class LBVipsDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -48,7 +53,7 @@ class LBVipsDiscovery(_BaseServicesDiscovery): class LBMembersDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -58,7 +63,7 @@ class LBMembersDiscovery(_BaseServicesDiscovery): class LBHealthMonitorsDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -67,7 +72,7 @@ class LBHealthMonitorsDiscovery(_BaseServicesDiscovery): class VPNServicesDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -77,7 +82,7 @@ class VPNServicesDiscovery(_BaseServicesDiscovery): class IPSecConnectionsDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -86,7 +91,7 @@ class IPSecConnectionsDiscovery(_BaseServicesDiscovery): class FirewallDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" @@ -96,7 +101,7 @@ class FirewallDiscovery(_BaseServicesDiscovery): class FirewallPolicyDiscovery(_BaseServicesDiscovery): - @plugin.check_keystone('network') + @plugin.check_keystone(cfg.CONF.service_types.neutron) def discover(self, manager, param=None): """Discover resources to monitor.""" diff --git a/ceilometer/neutron_client.py b/ceilometer/neutron_client.py index 4c73b0e4..930d7eab 100644 --- a/ceilometer/neutron_client.py +++ b/ceilometer/neutron_client.py @@ -21,6 +21,14 @@ from oslo.config import cfg from ceilometer.openstack.common import log + +service_types_opts = [ + cfg.StrOpt('neutron', + default='network', + help='Neutron service type.'), +] + +cfg.CONF.register_opts(service_types_opts, group='service_types') cfg.CONF.import_group('service_credentials', 'ceilometer.service') LOG = log.getLogger(__name__) @@ -51,7 +59,8 @@ class Client(object): 'password': conf.os_password, 'auth_url': conf.os_auth_url, 'region_name': conf.os_region_name, - 'endpoint_type': conf.os_endpoint_type + 'endpoint_type': conf.os_endpoint_type, + 'service_type': cfg.CONF.service_types.neutron } if conf.os_tenant_id: diff --git a/ceilometer/nova_client.py b/ceilometer/nova_client.py index e6a3c845..41d37beb 100644 --- a/ceilometer/nova_client.py +++ b/ceilometer/nova_client.py @@ -21,12 +21,22 @@ from oslo.config import cfg from ceilometer.openstack.common import log + nova_opts = [ cfg.BoolOpt('nova_http_log_debug', default=False, help='Allow novaclient\'s debug log output.'), ] + +service_types_opts = [ + cfg.StrOpt('nova', + default='compute', + help='Nova service type.'), +] + cfg.CONF.register_opts(nova_opts) +cfg.CONF.register_opts(service_types_opts, group='service_types') + cfg.CONF.import_group('service_credentials', 'ceilometer.service') LOG = log.getLogger(__name__) @@ -60,6 +70,7 @@ class Client(object): auth_token=auth_token, region_name=conf.os_region_name, endpoint_type=conf.os_endpoint_type, + service_type=cfg.CONF.service_types.nova, bypass_url=bypass_url, cacert=conf.os_cacert, insecure=conf.insecure, diff --git a/ceilometer/objectstore/swift.py b/ceilometer/objectstore/swift.py index d87f9954..2708fd92 100644 --- a/ceilometer/objectstore/swift.py +++ b/ceilometer/objectstore/swift.py @@ -40,7 +40,14 @@ OPTS = [ "reseller_prefix in proxy-server.conf."), ] +service_types_opts = [ + cfg.StrOpt('swift', + default='object-store', + help='Swift service type.'), +] + cfg.CONF.register_opts(OPTS) +cfg.CONF.register_opts(service_types_opts, group='service_types') class _Base(plugin.CentralPollster): @@ -62,11 +69,10 @@ class _Base(plugin.CentralPollster): # only ever called once if _Base._ENDPOINT is None: try: - endpoint_type = cfg.CONF.service_credentials.os_endpoint_type - endpoint = ksclient.service_catalog.url_for( - service_type='object-store', - endpoint_type=endpoint_type) - _Base._ENDPOINT = endpoint + conf = cfg.CONF.service_credentials + _Base._ENDPOINT = ksclient.service_catalog.url_for( + service_type=cfg.CONF.service_types.swift, + endpoint_type=conf.os_endpoint_type) except exceptions.EndpointNotFound: LOG.debug(_("Swift endpoint not found")) return _Base._ENDPOINT diff --git a/ceilometer/tests/energy/test_kwapi.py b/ceilometer/tests/energy/test_kwapi.py index f659e30d..4e5dd470 100644 --- a/ceilometer/tests/energy/test_kwapi.py +++ b/ceilometer/tests/energy/test_kwapi.py @@ -98,6 +98,10 @@ class TestEnergyPollster(base.BaseTestCase): probe_dict['id'] = key yield probe_dict + def test_default_discovery(self): + pollster = kwapi.EnergyPollster() + self.assertEqual('endpoint:energy', pollster.default_discovery) + def test_sample(self): cache = {} samples = list(kwapi.EnergyPollster().get_samples( @@ -161,6 +165,10 @@ class TestPowerPollster(base.BaseTestCase): probe_dict['id'] = key yield probe_dict + def test_default_discovery(self): + pollster = kwapi.PowerPollster() + self.assertEqual('endpoint:energy', pollster.default_discovery) + def test_sample(self): cache = {} samples = list(kwapi.PowerPollster().get_samples( diff --git a/ceilometer/tests/image/test_glance.py b/ceilometer/tests/image/test_glance.py index 6f60311b..f5bd398f 100644 --- a/ceilometer/tests/image/test_glance.py +++ b/ceilometer/tests/image/test_glance.py @@ -181,6 +181,10 @@ class TestImagePollster(base.BaseTestCase): glance._Base, 'get_glance_client', side_effect=self.fake_get_glance_client)) + def test_default_discovery(self): + pollster = glance.ImagePollster() + self.assertEqual('endpoint:image', pollster.default_discovery) + def test_iter_images(self): # Tests whether the iter_images method returns a unique image # list when there is nothing in the cache diff --git a/ceilometer/tests/network/test_floatingip.py b/ceilometer/tests/network/test_floatingip.py index 29fbfb5a..3248b164 100644 --- a/ceilometer/tests/network/test_floatingip.py +++ b/ceilometer/tests/network/test_floatingip.py @@ -56,6 +56,9 @@ class TestFloatingIPPollster(base.BaseTestCase): ips.append(ip) return ips + def test_default_discovery(self): + self.assertEqual('endpoint:compute', self.pollster.default_discovery) + # FIXME(dhellmann): Is there a useful way to define this # test without a database? # diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst index 736adb1f..464aa96f 100644 --- a/doc/source/configuration.rst +++ b/doc/source/configuration.rst @@ -67,6 +67,23 @@ pecan_debug The value of DEFAULT.debug Toggle Pe processes with mod_wsgi. =============================== ==================================== =============================================================== +Service polling configuration +============================== + +The following options must be placed under a [service_types] section +and will be used by Ceilometer to retrieve information from OpenStack +components. + +=============================== ==================================== ============================================================== +Parameter Default Note +=============================== ==================================== ============================================================== +nova compute The service type for nova +neutron network The service type for neutron +glance image The service type for glance +swift object-store The service type for swift +kwapi energy The service type for kwapi +=============================== ==================================== ============================================================== + Service polling authentication ============================== |