diff --git a/ceilometer/image/discovery.py b/ceilometer/image/discovery.py index 97f7de434d..036230239e 100644 --- a/ceilometer/image/discovery.py +++ b/ceilometer/image/discovery.py @@ -11,30 +11,22 @@ # License for the specific language governing permissions and limitations # under the License. -import glanceclient -from oslo_config import cfg +import openstack from ceilometer import keystone_client from ceilometer.polling import plugin_base -SERVICE_OPTS = [ - cfg.StrOpt('glance', - default='image', - help='Glance service type.'), -] - class ImagesDiscovery(plugin_base.DiscoveryBase): def __init__(self, conf): super().__init__(conf) creds = conf.service_credentials - self.glance_client = glanceclient.Client( - version='2', + self.image_client = openstack.connection.Connection( + image_api_version='2', session=keystone_client.get_session(conf), region_name=creds.region_name, - interface=creds.interface, - service_type=conf.service_types.glance) + image_interface=creds.interface) def discover(self, manager, param=None): """Discover resources to monitor.""" - return self.glance_client.images.list() + return self.image_client.image.images() diff --git a/ceilometer/image/glance.py b/ceilometer/image/glance.py index 9cc3c4da56..87b15ba2a1 100644 --- a/ceilometer/image/glance.py +++ b/ceilometer/image/glance.py @@ -37,7 +37,7 @@ class _Base(plugin_base.PollsterBase): "disk_format", "updated_at", "min_disk", - "protected", + "is_protected", "checksum", "min_ram", "tags", diff --git a/ceilometer/nova_client.py b/ceilometer/nova_client.py index 8712acaece..4572330026 100644 --- a/ceilometer/nova_client.py +++ b/ceilometer/nova_client.py @@ -13,10 +13,10 @@ import functools -import glanceclient import novaclient from novaclient import api_versions from novaclient import client as nova_client +import openstack from oslo_config import cfg from oslo_log import log @@ -62,12 +62,11 @@ class Client: endpoint_type=creds.interface, service_type=conf.service_types.nova) - self.glance_client = glanceclient.Client( - version='2', + self.image_client = openstack.connection.Connection( + image_api_version='2', session=ks_session, region_name=creds.region_name, - interface=creds.interface, - service_type=conf.service_types.glance) + image_interface=creds.interface) def _with_flavor_and_image(self, instances): flavor_cache = {} @@ -112,8 +111,8 @@ class Client: image = cache.get(iid) else: try: - image = self.glance_client.images.get(iid) - except glanceclient.exc.HTTPNotFound: + image = self.image_client.image.get_image(iid) + except openstack.exceptions.NotFoundException: image = None cache[iid] = image @@ -122,10 +121,9 @@ class Client: instance.image['name'] = ( getattr(image, 'name') if image else 'unknown-id-%s' % iid) - image_metadata = getattr(image, 'metadata', None) for attr, default in attr_defaults: - ameta = image_metadata.get(attr) if image_metadata else default + ameta = getattr(image, attr, default) if image else default setattr(instance, attr, ameta) if image: @@ -134,7 +132,8 @@ class Client: # image_meta values as strings. Do the same here. image_meta.update((k, str(v)) for k, v in image.items() - if k not in ('id', 'name', 'metadata')) + if k not in ('id', 'name', 'metadata', + 'kernel_id', 'ramdisk_id')) else: image_meta = {} instance.image_meta = image_meta diff --git a/ceilometer/opts.py b/ceilometer/opts.py index 9104c27175..e683e9bc96 100644 --- a/ceilometer/opts.py +++ b/ceilometer/opts.py @@ -103,7 +103,6 @@ def list_opts(): ('service_types', itertools.chain(ceilometer.alarm.discovery.SERVICE_OPTS, ceilometer.designate_client.SERVICE_OPTS, - ceilometer.image.discovery.SERVICE_OPTS, ceilometer.manila_client.SERVICE_OPTS, ceilometer.neutron_client.SERVICE_OPTS, ceilometer.nova_client.SERVICE_OPTS, diff --git a/ceilometer/tests/unit/image/test_glance.py b/ceilometer/tests/unit/image/test_glance.py index 0ce37ecf5f..becc276868 100644 --- a/ceilometer/tests/unit/image/test_glance.py +++ b/ceilometer/tests/unit/image/test_glance.py @@ -38,7 +38,7 @@ IMAGE_LIST = [ 'checksum': 'eb9139e4942121f22bbc2afc0400b2a4', 'created_at': '2016-06-20T13: 34: 40Z', 'disk_format': 'ami', - 'protected': False, + 'is_protected': False, 'schema': '/v2/schemas/image'}), type('Image', (object,), {'status': 'active', @@ -57,7 +57,7 @@ IMAGE_LIST = [ 'checksum': 'be575a2b939972276ef675752936977f', 'created_at': '2016-06-20T13: 34: 37Z', 'disk_format': 'ari', - 'protected': False, + 'is_protected': False, 'schema': '/v2/schemas/image'}), type('Image', (object,), {'status': 'active', @@ -76,7 +76,7 @@ IMAGE_LIST = [ 'checksum': '8a40c862b5735975d82605c1dd395796', 'created_at': '2016-06-20T13: 34: 35Z', 'disk_format': 'aki', - 'protected': False, + 'is_protected': False, 'schema': '/v2/schemas/image'}), ] diff --git a/ceilometer/tests/unit/test_novaclient.py b/ceilometer/tests/unit/test_novaclient.py index 681214081e..7ed8d1ba79 100644 --- a/ceilometer/tests/unit/test_novaclient.py +++ b/ceilometer/tests/unit/test_novaclient.py @@ -14,8 +14,8 @@ from unittest import mock import fixtures -import glanceclient import novaclient +import openstack from oslotest import base from ceilometer import nova_client @@ -35,12 +35,14 @@ class TestNovaClient(base.BaseTestCase): self.CONF = service.prepare_service([], []) self._flavors_count = 0 self._images_count = 0 - self.nv = nova_client.Client(self.CONF) + # Mock the openstack.connection.Connection to avoid auth issues + with mock.patch('openstack.connection.Connection'): + self.nv = nova_client.Client(self.CONF) self.useFixture(fixtures.MockPatchObject( self.nv.nova_client.flavors, 'get', side_effect=self.fake_flavors_get)) self.useFixture(fixtures.MockPatchObject( - self.nv.glance_client.images, 'get', + self.nv.image_client.image, 'get_image', side_effect=self.fake_images_get)) def fake_flavors_get(self, *args, **kwargs): @@ -61,29 +63,38 @@ class TestNovaClient(base.BaseTestCase): image_details = { # NOTE(callumdickinson): Real image IDs are UUIDs, not integers, # so the actual code runs assuming the IDs are strings. - 1: ('ubuntu-12.04-x86', - dict(kernel_id=11, ramdisk_id=21), - dict(container_format='bare', - disk_format='raw', - min_disk=1, - min_ram=0, - os_distro='ubuntu', - os_type='linux')), - 2: ('centos-5.4-x64', dict(kernel_id=12, ramdisk_id=22), dict()), - 3: ('rhel-6-x64', None, dict()), - 4: ('rhel-6-x64', dict(), dict()), - 5: ('rhel-6-x64', dict(kernel_id=11), dict()), - 6: ('rhel-6-x64', dict(ramdisk_id=21), dict()), + 1: dict(name='ubuntu-12.04-x86', + kernel_id=11, + ramdisk_id=21, + container_format='bare', + disk_format='raw', + min_disk=1, + min_ram=0, + os_distro='ubuntu', + os_type='linux'), + 2: dict(name='centos-5.4-x64', + kernel_id=12, + ramdisk_id=22), + 3: dict(name='rhel-6-x64', + kernel_id=None, + ramdisk_id=None), + 4: dict(name='rhel-6-x64', + kernel_id=None, + ramdisk_id=None), + 5: dict(name='rhel-6-x64', + kernel_id=11, + ramdisk_id=None), + 6: dict(name='rhel-6-x64', + kernel_id=None, + ramdisk_id=21), } if image_id in image_details: return FauxImage( id=image_id, - name=image_details[image_id][0], - metadata=image_details[image_id][1], - **image_details[image_id][2]) + **image_details[image_id]) else: - raise glanceclient.exc.HTTPNotFound('foobar') + raise openstack.exceptions.NotFoundException('foobar') @staticmethod def fake_servers_list(*args, **kwargs): diff --git a/requirements.txt b/requirements.txt index 6f9f9b9904..9f8c4bb050 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,6 @@ oslo.messaging>=10.3.0 # Apache-2.0 oslo.upgradecheck>=0.1.1 # Apache-2.0 oslo.utils>=4.7.0 # Apache-2.0 oslo.privsep>=1.32.0 # Apache-2.0 -python-glanceclient>=2.8.0 # Apache-2.0 python-keystoneclient>=3.18.0 # Apache-2.0 keystoneauth1>=3.18.0 # Apache-2.0 python-neutronclient>=6.7.0 # Apache-2.0