summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisashi Osanai <osanai.hisashi@jp.fujitsu.com>2014-08-08 14:30:43 +0900
committerHisashi Osanai <osanai.hisashi@jp.fujitsu.com>2014-09-19 17:23:52 +0900
commit72d65777962a2b93e80f7e17ce6602caa6a79bed (patch)
tree83e4e2f01628078b0d6724cec9a73adf3fc61241
parent7b89798be3b81259a0440dec928cb11cccb7158d (diff)
downloadceilometer-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.py12
-rw-r--r--ceilometer/image/glance.py9
-rw-r--r--ceilometer/network/floatingip.py7
-rw-r--r--ceilometer/network/services/discovery.py21
-rw-r--r--ceilometer/neutron_client.py11
-rw-r--r--ceilometer/nova_client.py11
-rw-r--r--ceilometer/objectstore/swift.py16
-rw-r--r--ceilometer/tests/energy/test_kwapi.py8
-rw-r--r--ceilometer/tests/image/test_glance.py4
-rw-r--r--ceilometer/tests/network/test_floatingip.py3
-rw-r--r--doc/source/configuration.rst17
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
==============================