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
This commit is contained in:
parent
7b89798be3
commit
72d6577796
@ -17,6 +17,7 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from keystoneclient import exceptions
|
from keystoneclient import exceptions
|
||||||
|
from oslo.config import cfg
|
||||||
import requests
|
import requests
|
||||||
import six
|
import six
|
||||||
|
|
||||||
@ -25,8 +26,17 @@ from ceilometer.openstack.common.gettextutils import _
|
|||||||
from ceilometer.openstack.common import log
|
from ceilometer.openstack.common import log
|
||||||
from ceilometer import sample
|
from ceilometer import sample
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
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):
|
class KwapiClient(object):
|
||||||
"""Kwapi API client."""
|
"""Kwapi API client."""
|
||||||
@ -56,7 +66,7 @@ class _Base(plugin.CentralPollster):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def default_discovery(self):
|
def default_discovery(self):
|
||||||
return 'endpoint:energy'
|
return 'endpoint:%s' % cfg.CONF.service_types.kwapi
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_kwapi_client(ksclient, endpoint):
|
def get_kwapi_client(ksclient, endpoint):
|
||||||
|
@ -39,14 +39,21 @@ OPTS = [
|
|||||||
"(default value in glanceclient is used)."),
|
"(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(OPTS)
|
||||||
|
cfg.CONF.register_opts(service_types_opts, group='service_types')
|
||||||
|
|
||||||
|
|
||||||
class _Base(plugin.CentralPollster):
|
class _Base(plugin.CentralPollster):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def default_discovery(self):
|
def default_discovery(self):
|
||||||
return 'endpoint:image'
|
return 'endpoint:%s' % cfg.CONF.service_types.glance
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_glance_client(ksclient, endpoint):
|
def get_glance_client(ksclient, endpoint):
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from oslo.config import cfg
|
||||||
from oslo.utils import timeutils
|
from oslo.utils import timeutils
|
||||||
|
|
||||||
from ceilometer.central import plugin
|
from ceilometer.central import plugin
|
||||||
@ -25,8 +27,11 @@ from ceilometer.openstack.common.gettextutils import _
|
|||||||
from ceilometer.openstack.common import log
|
from ceilometer.openstack.common import log
|
||||||
from ceilometer import sample
|
from ceilometer import sample
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
cfg.CONF.import_group('service_types', 'ceilometer.nova_client')
|
||||||
|
|
||||||
|
|
||||||
class FloatingIPPollster(plugin.CentralPollster):
|
class FloatingIPPollster(plugin.CentralPollster):
|
||||||
|
|
||||||
@ -43,7 +48,7 @@ class FloatingIPPollster(plugin.CentralPollster):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def default_discovery(self):
|
def default_discovery(self):
|
||||||
return 'endpoint:compute'
|
return 'endpoint:%s' % cfg.CONF.service_types.nova
|
||||||
|
|
||||||
def get_samples(self, manager, cache, resources):
|
def get_samples(self, manager, cache, resources):
|
||||||
for endpoint in resources:
|
for endpoint in resources:
|
||||||
|
@ -15,11 +15,16 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from oslo.config import cfg
|
||||||
|
|
||||||
from ceilometer.central import plugin
|
from ceilometer.central import plugin
|
||||||
from ceilometer import neutron_client
|
from ceilometer import neutron_client
|
||||||
from ceilometer import plugin as base_plugin
|
from ceilometer import plugin as base_plugin
|
||||||
|
|
||||||
|
|
||||||
|
cfg.CONF.import_group('service_types', 'ceilometer.neutron_client')
|
||||||
|
|
||||||
|
|
||||||
class _BaseServicesDiscovery(base_plugin.DiscoveryBase):
|
class _BaseServicesDiscovery(base_plugin.DiscoveryBase):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -28,7 +33,7 @@ class _BaseServicesDiscovery(base_plugin.DiscoveryBase):
|
|||||||
|
|
||||||
|
|
||||||
class LBPoolsDiscovery(_BaseServicesDiscovery):
|
class LBPoolsDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -38,7 +43,7 @@ class LBPoolsDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class LBVipsDiscovery(_BaseServicesDiscovery):
|
class LBVipsDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -48,7 +53,7 @@ class LBVipsDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class LBMembersDiscovery(_BaseServicesDiscovery):
|
class LBMembersDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -58,7 +63,7 @@ class LBMembersDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class LBHealthMonitorsDiscovery(_BaseServicesDiscovery):
|
class LBHealthMonitorsDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -67,7 +72,7 @@ class LBHealthMonitorsDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class VPNServicesDiscovery(_BaseServicesDiscovery):
|
class VPNServicesDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -77,7 +82,7 @@ class VPNServicesDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class IPSecConnectionsDiscovery(_BaseServicesDiscovery):
|
class IPSecConnectionsDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -86,7 +91,7 @@ class IPSecConnectionsDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class FirewallDiscovery(_BaseServicesDiscovery):
|
class FirewallDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
@ -96,7 +101,7 @@ class FirewallDiscovery(_BaseServicesDiscovery):
|
|||||||
|
|
||||||
|
|
||||||
class FirewallPolicyDiscovery(_BaseServicesDiscovery):
|
class FirewallPolicyDiscovery(_BaseServicesDiscovery):
|
||||||
@plugin.check_keystone('network')
|
@plugin.check_keystone(cfg.CONF.service_types.neutron)
|
||||||
def discover(self, manager, param=None):
|
def discover(self, manager, param=None):
|
||||||
"""Discover resources to monitor."""
|
"""Discover resources to monitor."""
|
||||||
|
|
||||||
|
@ -21,6 +21,14 @@ from oslo.config import cfg
|
|||||||
|
|
||||||
from ceilometer.openstack.common import log
|
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')
|
cfg.CONF.import_group('service_credentials', 'ceilometer.service')
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
@ -51,7 +59,8 @@ class Client(object):
|
|||||||
'password': conf.os_password,
|
'password': conf.os_password,
|
||||||
'auth_url': conf.os_auth_url,
|
'auth_url': conf.os_auth_url,
|
||||||
'region_name': conf.os_region_name,
|
'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:
|
if conf.os_tenant_id:
|
||||||
|
@ -21,12 +21,22 @@ from oslo.config import cfg
|
|||||||
|
|
||||||
from ceilometer.openstack.common import log
|
from ceilometer.openstack.common import log
|
||||||
|
|
||||||
|
|
||||||
nova_opts = [
|
nova_opts = [
|
||||||
cfg.BoolOpt('nova_http_log_debug',
|
cfg.BoolOpt('nova_http_log_debug',
|
||||||
default=False,
|
default=False,
|
||||||
help='Allow novaclient\'s debug log output.'),
|
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(nova_opts)
|
||||||
|
cfg.CONF.register_opts(service_types_opts, group='service_types')
|
||||||
|
|
||||||
cfg.CONF.import_group('service_credentials', 'ceilometer.service')
|
cfg.CONF.import_group('service_credentials', 'ceilometer.service')
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
@ -60,6 +70,7 @@ class Client(object):
|
|||||||
auth_token=auth_token,
|
auth_token=auth_token,
|
||||||
region_name=conf.os_region_name,
|
region_name=conf.os_region_name,
|
||||||
endpoint_type=conf.os_endpoint_type,
|
endpoint_type=conf.os_endpoint_type,
|
||||||
|
service_type=cfg.CONF.service_types.nova,
|
||||||
bypass_url=bypass_url,
|
bypass_url=bypass_url,
|
||||||
cacert=conf.os_cacert,
|
cacert=conf.os_cacert,
|
||||||
insecure=conf.insecure,
|
insecure=conf.insecure,
|
||||||
|
@ -40,7 +40,14 @@ OPTS = [
|
|||||||
"reseller_prefix in proxy-server.conf."),
|
"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(OPTS)
|
||||||
|
cfg.CONF.register_opts(service_types_opts, group='service_types')
|
||||||
|
|
||||||
|
|
||||||
class _Base(plugin.CentralPollster):
|
class _Base(plugin.CentralPollster):
|
||||||
@ -62,11 +69,10 @@ class _Base(plugin.CentralPollster):
|
|||||||
# only ever called once
|
# only ever called once
|
||||||
if _Base._ENDPOINT is None:
|
if _Base._ENDPOINT is None:
|
||||||
try:
|
try:
|
||||||
endpoint_type = cfg.CONF.service_credentials.os_endpoint_type
|
conf = cfg.CONF.service_credentials
|
||||||
endpoint = ksclient.service_catalog.url_for(
|
_Base._ENDPOINT = ksclient.service_catalog.url_for(
|
||||||
service_type='object-store',
|
service_type=cfg.CONF.service_types.swift,
|
||||||
endpoint_type=endpoint_type)
|
endpoint_type=conf.os_endpoint_type)
|
||||||
_Base._ENDPOINT = endpoint
|
|
||||||
except exceptions.EndpointNotFound:
|
except exceptions.EndpointNotFound:
|
||||||
LOG.debug(_("Swift endpoint not found"))
|
LOG.debug(_("Swift endpoint not found"))
|
||||||
return _Base._ENDPOINT
|
return _Base._ENDPOINT
|
||||||
|
@ -98,6 +98,10 @@ class TestEnergyPollster(base.BaseTestCase):
|
|||||||
probe_dict['id'] = key
|
probe_dict['id'] = key
|
||||||
yield probe_dict
|
yield probe_dict
|
||||||
|
|
||||||
|
def test_default_discovery(self):
|
||||||
|
pollster = kwapi.EnergyPollster()
|
||||||
|
self.assertEqual('endpoint:energy', pollster.default_discovery)
|
||||||
|
|
||||||
def test_sample(self):
|
def test_sample(self):
|
||||||
cache = {}
|
cache = {}
|
||||||
samples = list(kwapi.EnergyPollster().get_samples(
|
samples = list(kwapi.EnergyPollster().get_samples(
|
||||||
@ -161,6 +165,10 @@ class TestPowerPollster(base.BaseTestCase):
|
|||||||
probe_dict['id'] = key
|
probe_dict['id'] = key
|
||||||
yield probe_dict
|
yield probe_dict
|
||||||
|
|
||||||
|
def test_default_discovery(self):
|
||||||
|
pollster = kwapi.PowerPollster()
|
||||||
|
self.assertEqual('endpoint:energy', pollster.default_discovery)
|
||||||
|
|
||||||
def test_sample(self):
|
def test_sample(self):
|
||||||
cache = {}
|
cache = {}
|
||||||
samples = list(kwapi.PowerPollster().get_samples(
|
samples = list(kwapi.PowerPollster().get_samples(
|
||||||
|
@ -181,6 +181,10 @@ class TestImagePollster(base.BaseTestCase):
|
|||||||
glance._Base, 'get_glance_client',
|
glance._Base, 'get_glance_client',
|
||||||
side_effect=self.fake_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):
|
def test_iter_images(self):
|
||||||
# Tests whether the iter_images method returns a unique image
|
# Tests whether the iter_images method returns a unique image
|
||||||
# list when there is nothing in the cache
|
# list when there is nothing in the cache
|
||||||
|
@ -56,6 +56,9 @@ class TestFloatingIPPollster(base.BaseTestCase):
|
|||||||
ips.append(ip)
|
ips.append(ip)
|
||||||
return ips
|
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
|
# FIXME(dhellmann): Is there a useful way to define this
|
||||||
# test without a database?
|
# test without a database?
|
||||||
#
|
#
|
||||||
|
@ -67,6 +67,23 @@ pecan_debug The value of DEFAULT.debug Toggle Pe
|
|||||||
processes with mod_wsgi.
|
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
|
Service polling authentication
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user