Merge "fix network discovery meters"

This commit is contained in:
Jenkins 2014-09-11 15:00:38 +00:00 committed by Gerrit Code Review
commit c5ce0a703f
5 changed files with 46 additions and 28 deletions

View File

@ -16,11 +16,15 @@
# under the License.
"""Base class for plugins used by the central agent.
"""
from keystoneclient.v2_0 import client as ksclient
from oslo.config import cfg
from ceilometer.openstack.common.gettextutils import _
from ceilometer.openstack.common import log
from ceilometer import plugin
cfg.CONF.import_group('service_credentials', 'ceilometer.service')
LOG = log.getLogger(__name__)
@ -28,32 +32,46 @@ class CentralPollster(plugin.PollsterBase):
"""Base class for plugins that support the polling API."""
def check_keystone(service_type=None, client=None):
def _get_keystone():
try:
return ksclient.Client(
username=cfg.CONF.service_credentials.os_username,
password=cfg.CONF.service_credentials.os_password,
tenant_id=cfg.CONF.service_credentials.os_tenant_id,
tenant_name=cfg.CONF.service_credentials.os_tenant_name,
cacert=cfg.CONF.service_credentials.os_cacert,
auth_url=cfg.CONF.service_credentials.os_auth_url,
region_name=cfg.CONF.service_credentials.os_region_name,
insecure=cfg.CONF.service_credentials.insecure)
except Exception as e:
return e
def check_keystone(service_type=None):
"""Decorator function to check if manager has valid keystone client.
Also checks if the service is registered/enabled in Keystone.
:param service_type: name of service in Keystone
:param client: client name if not passed in as function param
"""
def wrapped(f):
def func(self, *args, **kwargs):
if client:
manager = getattr(self, client, None)
else:
manager = kwargs.get('manager')
manager = kwargs.get('manager')
if not manager and len(args) > 0:
manager = args[0]
keystone = getattr(manager, 'keystone', None)
if not keystone or isinstance(keystone, Exception):
if not keystone:
keystone = _get_keystone()
if isinstance(keystone, Exception):
LOG.error(_('Skip due to keystone error %s'),
str(keystone) if keystone else '')
return iter([])
elif service_type:
endpoints = keystone.service_catalog.get_endpoints()
if not endpoints.get(service_type):
LOG.warning(_('Skipping because service is not'
'registered in keystone'))
endpoints = keystone.service_catalog.get_endpoints(
service_type=service_type)
if not endpoints:
LOG.warning(_('Skipping because %s service is not '
'registered in keystone') % service_type)
return iter([])
return f(self, *args, **kwargs)
return func

View File

@ -28,7 +28,7 @@ class _BaseServicesDiscovery(base_plugin.DiscoveryBase):
class LBPoolsDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -38,7 +38,7 @@ class LBPoolsDiscovery(_BaseServicesDiscovery):
class LBVipsDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -48,7 +48,7 @@ class LBVipsDiscovery(_BaseServicesDiscovery):
class LBMembersDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -58,7 +58,7 @@ class LBMembersDiscovery(_BaseServicesDiscovery):
class LBHealthMonitorsDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -67,7 +67,7 @@ class LBHealthMonitorsDiscovery(_BaseServicesDiscovery):
class VPNServicesDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -77,7 +77,7 @@ class VPNServicesDiscovery(_BaseServicesDiscovery):
class IPSecConnectionsDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -86,7 +86,7 @@ class IPSecConnectionsDiscovery(_BaseServicesDiscovery):
class FirewallDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""
@ -96,7 +96,7 @@ class FirewallDiscovery(_BaseServicesDiscovery):
class FirewallPolicyDiscovery(_BaseServicesDiscovery):
@plugin.check_keystone('network', 'neutron_cli')
@plugin.check_keystone('network')
def discover(self, param=None):
"""Discover resources to monitor."""

View File

@ -20,9 +20,9 @@ from oslotest import base
from oslotest import mockpatch
from ceilometer.central import manager
from ceilometer.central import plugin
from ceilometer.network.services import discovery
from ceilometer.network.services import fwaas
from ceilometer import neutron_client as cli
from ceilometer.openstack.common import context
@ -34,8 +34,8 @@ class _BaseTestFWPollster(base.BaseTestCase):
self.addCleanup(mock.patch.stopall)
self.context = context.get_admin_context()
self.manager = manager.AgentManager()
cli.Client.keystone = mock.Mock()
cli.Client.keystone.service_catalog.get_endpoints = mock.Mock(
plugin._get_keystone = mock.Mock()
plugin._get_keystone.service_catalog.get_endpoints = mock.MagicMock(
return_value={'network': mock.ANY})

View File

@ -20,9 +20,9 @@ from oslotest import base
from oslotest import mockpatch
from ceilometer.central import manager
from ceilometer.central import plugin
from ceilometer.network.services import discovery
from ceilometer.network.services import lbaas
from ceilometer import neutron_client as cli
from ceilometer.openstack.common import context
@ -34,8 +34,8 @@ class _BaseTestLBPollster(base.BaseTestCase):
self.addCleanup(mock.patch.stopall)
self.context = context.get_admin_context()
self.manager = manager.AgentManager()
cli.Client.keystone = mock.Mock()
cli.Client.keystone.service_catalog.get_endpoints = mock.Mock(
plugin._get_keystone = mock.Mock()
plugin._get_keystone.service_catalog.get_endpoints = mock.MagicMock(
return_value={'network': mock.ANY})

View File

@ -20,9 +20,9 @@ from oslotest import base
from oslotest import mockpatch
from ceilometer.central import manager
from ceilometer.central import plugin
from ceilometer.network.services import discovery
from ceilometer.network.services import vpnaas
from ceilometer import neutron_client as cli
from ceilometer.openstack.common import context
@ -34,8 +34,8 @@ class _BaseTestVPNPollster(base.BaseTestCase):
self.addCleanup(mock.patch.stopall)
self.context = context.get_admin_context()
self.manager = manager.AgentManager()
cli.Client.keystone = mock.Mock()
cli.Client.keystone.service_catalog.get_endpoints = mock.Mock(
plugin._get_keystone = mock.Mock()
plugin._get_keystone.service_catalog.get_endpoints = mock.MagicMock(
return_value={'network': mock.ANY})