Replace glanceclient with openstacksdk

The glance client will be deprecated one day. Projects using it should
switch to using the OpenStack SDK instead.

Change-Id: I74cedbb35a23572256998b3c20276f57c4ea1ceb
Signed-off-by: Cyril Roelandt <cyril@redhat.com>
This commit is contained in:
Cyril Roelandt
2025-10-09 22:10:39 +02:00
parent 9729b4046c
commit 95500ce252
7 changed files with 49 additions and 49 deletions

View File

@@ -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()

View File

@@ -37,7 +37,7 @@ class _Base(plugin_base.PollsterBase):
"disk_format",
"updated_at",
"min_disk",
"protected",
"is_protected",
"checksum",
"min_ram",
"tags",

View File

@@ -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

View File

@@ -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,

View File

@@ -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'}),
]

View File

@@ -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):

View File

@@ -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