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:
@@ -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()
|
||||
|
||||
@@ -37,7 +37,7 @@ class _Base(plugin_base.PollsterBase):
|
||||
"disk_format",
|
||||
"updated_at",
|
||||
"min_disk",
|
||||
"protected",
|
||||
"is_protected",
|
||||
"checksum",
|
||||
"min_ram",
|
||||
"tags",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'}),
|
||||
]
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user