Use the same Keystone client instance for pollster
This provides a Keystone client instance for all pollsters running on the central agent. Blueprint: pollster-global-keystone-auth Change-Id: I83d8157683410d2eaa093c35d4071f7ed0e22ebd Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
d33d20c372
commit
86586188c0
@ -16,6 +16,8 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
|
||||
from ceilometer import agent
|
||||
from ceilometer import extension_manager
|
||||
from ceilometer.openstack.common import cfg
|
||||
@ -42,6 +44,12 @@ class AgentManager(agent.AgentManager):
|
||||
|
||||
def periodic_tasks(self, context, raise_on_error=False):
|
||||
"""Tasks to be run at a periodic interval."""
|
||||
self.keystone = ksclient.Client(username=cfg.CONF.os_username,
|
||||
password=cfg.CONF.os_password,
|
||||
tenant_id=cfg.CONF.os_tenant_id,
|
||||
tenant_name=cfg.CONF.os_tenant_name,
|
||||
auth_url=cfg.CONF.os_auth_url)
|
||||
|
||||
self.ext_manager.map(self.publish_counters_from_one_pollster,
|
||||
manager=self,
|
||||
context=context,
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
import datetime
|
||||
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
import requests
|
||||
|
||||
from ceilometer import counter
|
||||
@ -51,21 +50,16 @@ class _Base(plugin.CentralPollster):
|
||||
"""Base class for the Kwapi pollster, derived from CentralPollster."""
|
||||
|
||||
@staticmethod
|
||||
def get_kwapi_client():
|
||||
def get_kwapi_client(ksclient):
|
||||
"""Returns a KwapiClient configured with the proper url and token."""
|
||||
keystone = ksclient.Client(username=cfg.CONF.os_username,
|
||||
password=cfg.CONF.os_password,
|
||||
tenant_id=cfg.CONF.os_tenant_id,
|
||||
tenant_name=cfg.CONF.os_tenant_name,
|
||||
auth_url=cfg.CONF.os_auth_url)
|
||||
endpoint = keystone.service_catalog.url_for(service_type='energy',
|
||||
endpoint = ksclient.service_catalog.url_for(service_type='energy',
|
||||
endpoint_type='internalURL'
|
||||
)
|
||||
return KwapiClient(endpoint, keystone.auth_token)
|
||||
return KwapiClient(endpoint, ksclient.auth_token)
|
||||
|
||||
def iter_probes(self):
|
||||
def iter_probes(self, ksclient):
|
||||
"""Iterate over all probes."""
|
||||
client = self.get_kwapi_client()
|
||||
client = self.get_kwapi_client(ksclient)
|
||||
return client.iter_probes()
|
||||
|
||||
|
||||
@ -78,7 +72,7 @@ class KwapiPollster(_Base):
|
||||
|
||||
def get_counters(self, manager):
|
||||
"""Returns all counters."""
|
||||
for probe in self.iter_probes():
|
||||
for probe in self.iter_probes(manager.keystone):
|
||||
yield counter.Counter(
|
||||
name='energy',
|
||||
type=counter.TYPE_CUMULATIVE,
|
||||
|
@ -23,33 +23,27 @@ from __future__ import absolute_import
|
||||
import itertools
|
||||
|
||||
import glanceclient
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
|
||||
from ceilometer import plugin
|
||||
from ceilometer import counter
|
||||
from ceilometer.openstack.common import cfg
|
||||
from ceilometer.openstack.common import timeutils
|
||||
|
||||
|
||||
class _Base(plugin.PollsterBase):
|
||||
|
||||
@staticmethod
|
||||
def get_glance_client():
|
||||
k = ksclient.Client(username=cfg.CONF.os_username,
|
||||
password=cfg.CONF.os_password,
|
||||
tenant_id=cfg.CONF.os_tenant_id,
|
||||
tenant_name=cfg.CONF.os_tenant_name,
|
||||
auth_url=cfg.CONF.os_auth_url)
|
||||
|
||||
endpoint = k.service_catalog.url_for(service_type='image',
|
||||
endpoint_type='internalURL')
|
||||
def get_glance_client(ksclient):
|
||||
endpoint = ksclient.service_catalog.url_for(
|
||||
service_type='image',
|
||||
endpoint_type='internalURL')
|
||||
|
||||
# hard-code v1 glance API version selection while v2 API matures
|
||||
return glanceclient.Client('1', endpoint, token=k.auth_token)
|
||||
return glanceclient.Client('1', endpoint,
|
||||
token=ksclient.auth_token)
|
||||
|
||||
def iter_images(self):
|
||||
def iter_images(self, ksclient):
|
||||
"""Iterate over all images."""
|
||||
client = self.get_glance_client()
|
||||
client = self.get_glance_client(ksclient)
|
||||
#TODO(eglynn): use pagination to protect against unbounded
|
||||
# memory usage
|
||||
return itertools.chain(
|
||||
@ -88,7 +82,7 @@ class ImagePollster(_Base):
|
||||
return ['image', 'image.size']
|
||||
|
||||
def get_counters(self, manager):
|
||||
for image in self.iter_images():
|
||||
for image in self.iter_images(manager.keystone):
|
||||
yield counter.Counter(
|
||||
name='image',
|
||||
type=counter.TYPE_GAUGE,
|
||||
|
@ -22,7 +22,6 @@ from __future__ import absolute_import
|
||||
|
||||
import abc
|
||||
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
from swiftclient import client as swift
|
||||
|
||||
from ceilometer import plugin
|
||||
@ -49,11 +48,11 @@ class _Base(plugin.PollsterBase):
|
||||
|
||||
@staticmethod
|
||||
@abc.abstractmethod
|
||||
def iter_accounts():
|
||||
def iter_accounts(ksclient):
|
||||
"""Iterate over all accounts, yielding (tenant_id, stats) tuples."""
|
||||
|
||||
def get_counters(self, manager):
|
||||
for tenant, account in self.iter_accounts():
|
||||
for tenant, account in self.iter_accounts(manager.keystone):
|
||||
yield counter.Counter(
|
||||
name='storage.objects',
|
||||
type=counter.TYPE_GAUGE,
|
||||
@ -100,14 +99,11 @@ class SwiftPollster(_Base):
|
||||
'storage.objects.containers']
|
||||
|
||||
@staticmethod
|
||||
def iter_accounts():
|
||||
ks = ksclient.Client(username=cfg.CONF.os_username,
|
||||
password=cfg.CONF.os_password,
|
||||
tenant_name=cfg.CONF.os_tenant_name,
|
||||
auth_url=cfg.CONF.os_auth_url)
|
||||
endpoint = ks.service_catalog.url_for(service_type='object-store',
|
||||
endpoint_type='adminURL')
|
||||
def iter_accounts(ksclient):
|
||||
endpoint = ksclient.service_catalog.url_for(
|
||||
service_type='object-store',
|
||||
endpoint_type='adminURL')
|
||||
base_url = '%s/v1/%s' % (endpoint, cfg.CONF.reseller_prefix)
|
||||
for t in ks.tenants.list():
|
||||
for t in ksclient.tenants.list():
|
||||
yield (t.id, swift.head_account('%s%s' % (base_url, t.id),
|
||||
ks.auth_token))
|
||||
ksclient.auth_token))
|
||||
|
@ -27,6 +27,7 @@ from ceilometer import publish
|
||||
from ceilometer.tests import base
|
||||
|
||||
from ceilometer.openstack.common import cfg
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
|
||||
|
||||
def test_load_plugins():
|
||||
@ -62,6 +63,7 @@ class TestRunTasks(base.TestCase):
|
||||
super(TestRunTasks, self).setUp()
|
||||
self.notifications = []
|
||||
self.stubs.Set(publish, 'publish_counter', self.faux_notify)
|
||||
self.stubs.Set(ksclient, 'Client', lambda *args, **kwargs: None)
|
||||
self.mgr = manager.AgentManager()
|
||||
self.mgr.ext_manager = extension.ExtensionManager('fake',
|
||||
invoke_on_load=False,
|
||||
|
@ -43,10 +43,17 @@ PROBE_DICT = {
|
||||
}
|
||||
|
||||
|
||||
class TestManager(manager.AgentManager):
|
||||
|
||||
def __init__(self):
|
||||
super(TestManager, self).__init__()
|
||||
self.keystone = None
|
||||
|
||||
|
||||
class TestKwapiPollster(base.TestCase):
|
||||
|
||||
@staticmethod
|
||||
def fake_kwapi_iter_probes(foobar):
|
||||
def fake_kwapi_iter_probes(self, ksclient):
|
||||
probes = PROBE_DICT['probes']
|
||||
for key, value in probes.iteritems():
|
||||
probe_dict = value
|
||||
@ -56,7 +63,7 @@ class TestKwapiPollster(base.TestCase):
|
||||
def setUp(self):
|
||||
super(TestKwapiPollster, self).setUp()
|
||||
self.context = context.get_admin_context()
|
||||
self.manager = manager.AgentManager()
|
||||
self.manager = TestManager()
|
||||
self.stubs.Set(kwapi._Base, 'iter_probes', self.fake_kwapi_iter_probes)
|
||||
|
||||
def test_kwapi_counter(self):
|
||||
|
@ -83,16 +83,23 @@ IMAGE_LIST = [
|
||||
]
|
||||
|
||||
|
||||
class TestManager(manager.AgentManager):
|
||||
|
||||
def __init__(self):
|
||||
super(TestManager, self).__init__()
|
||||
self.keystone = None
|
||||
|
||||
|
||||
class TestImagePollster(base.TestCase):
|
||||
|
||||
@staticmethod
|
||||
def fake_glance_iter_images(foobar):
|
||||
def fake_glance_iter_images(self, ksclient):
|
||||
return iter(IMAGE_LIST)
|
||||
|
||||
def setUp(self):
|
||||
super(TestImagePollster, self).setUp()
|
||||
self.context = context.get_admin_context()
|
||||
self.manager = manager.AgentManager()
|
||||
self.manager = TestManager()
|
||||
self.stubs.Set(glance._Base, 'iter_images',
|
||||
self.fake_glance_iter_images)
|
||||
|
||||
|
@ -36,6 +36,7 @@ class TestFloatingIPPollster(base.TestCase):
|
||||
self.stubs.Set(nova_client.Client, 'floating_ip_get_all',
|
||||
self.faux_get_ips)
|
||||
|
||||
@staticmethod
|
||||
def faux_get_ips(self):
|
||||
ips = []
|
||||
for i in range(1, 4):
|
||||
|
@ -31,17 +31,24 @@ ACCOUNTS = [('tenant-000', {'x-account-object-count': 12,
|
||||
})]
|
||||
|
||||
|
||||
class TestManager(manager.AgentManager):
|
||||
|
||||
def __init__(self):
|
||||
super(TestManager, self).__init__()
|
||||
self.keystone = None
|
||||
|
||||
|
||||
class TestSwiftPollster(base.TestCase):
|
||||
|
||||
@staticmethod
|
||||
def fake_iter_accounts(_dummy):
|
||||
def fake_iter_accounts(self, ksclient):
|
||||
for i in ACCOUNTS:
|
||||
yield i
|
||||
|
||||
def setUp(self):
|
||||
super(TestSwiftPollster, self).setUp()
|
||||
self.pollster = swift.SwiftPollster()
|
||||
self.manager = manager.AgentManager()
|
||||
self.manager = TestManager()
|
||||
self.stubs.Set(swift.SwiftPollster, 'iter_accounts',
|
||||
self.fake_iter_accounts)
|
||||
|
||||
@ -50,6 +57,6 @@ class TestSwiftPollster(base.TestCase):
|
||||
self.assertEqual(len(counters), 6)
|
||||
|
||||
def test_objectstore_get_counter_names(self):
|
||||
counters = list(self.pollster.get_counters(None))
|
||||
counters = list(self.pollster.get_counters(self.manager))
|
||||
self.assertEqual(set([c.name for c in counters]),
|
||||
set(self.pollster.get_counter_names()))
|
||||
|
Loading…
x
Reference in New Issue
Block a user