Switch to use glanceclient to get image

Since Nova has deprecated the API proxies, see[1], we need to switch to
use glanceclient to get image in ceilometer/nova_client.py.

[1] https://blueprints.launchpad.net/nova/+spec/deprecate-api-proxies

Change-Id: I13f794cd3b3c6ed345fcf0522229f961649eeb22
Closes-bug: #1594216
This commit is contained in:
liusheng 2016-06-20 09:44:37 +08:00
parent c51c9f1564
commit 23247f8b84
2 changed files with 17 additions and 10 deletions

View File

@ -13,6 +13,7 @@
import functools import functools
import glanceclient
import novaclient import novaclient
from novaclient import api_versions from novaclient import api_versions
from novaclient import client as nova_client from novaclient import client as nova_client
@ -39,6 +40,7 @@ SERVICE_OPTS = [
cfg.CONF.register_opts(OPTS) cfg.CONF.register_opts(OPTS)
cfg.CONF.register_opts(SERVICE_OPTS, group='service_types') cfg.CONF.register_opts(SERVICE_OPTS, group='service_types')
cfg.CONF.import_opt('http_timeout', 'ceilometer.service') cfg.CONF.import_opt('http_timeout', 'ceilometer.service')
cfg.CONF.import_opt('glance', 'ceilometer.image.glance', 'service_types')
cfg.CONF.import_group('service_credentials', 'ceilometer.keystone_client') cfg.CONF.import_group('service_credentials', 'ceilometer.keystone_client')
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
@ -60,7 +62,7 @@ def logged(func):
class Client(object): class Client(object):
"""A client which gets information via python-novaclient.""" """A client which gets information via python-novaclient."""
def __init__(self, endpoint_override=None, auth=None): def __init__(self):
"""Initialize a nova client object.""" """Initialize a nova client object."""
conf = cfg.CONF.service_credentials conf = cfg.CONF.service_credentials
@ -68,21 +70,25 @@ class Client(object):
if cfg.CONF.nova_http_log_debug: if cfg.CONF.nova_http_log_debug:
logger = log.getLogger("novaclient-debug") logger = log.getLogger("novaclient-debug")
logger.logger.setLevel(log.DEBUG) logger.logger.setLevel(log.DEBUG)
ks_session = keystone_client.get_session()
self.nova_client = nova_client.Client( self.nova_client = nova_client.Client(
version=api_versions.APIVersion('2.1'), version=api_versions.APIVersion('2.1'),
session=keystone_client.get_session(), session=ks_session,
# nova adapter options # nova adapter options
region_name=conf.region_name, region_name=conf.region_name,
interface=conf.interface, interface=conf.interface,
service_type=cfg.CONF.service_types.nova, service_type=cfg.CONF.service_types.nova,
# keystone adapter options
endpoint_override=endpoint_override,
auth=auth,
logger=logger) logger=logger)
self.glance_client = glanceclient.Client(
version='2',
session=ks_session,
region_name=conf.region_name,
interface=conf.interface,
service_type=cfg.CONF.service_types.glance)
def _with_flavor_and_image(self, instances): def _with_flavor_and_image(self, instances):
flavor_cache = {} flavor_cache = {}
image_cache = {} image_cache = {}
@ -126,8 +132,8 @@ class Client(object):
image = cache.get(iid) image = cache.get(iid)
else: else:
try: try:
image = self.nova_client.images.get(iid) image = self.glance_client.images.get(iid)
except novaclient.exceptions.NotFound: except glanceclient.exc.HTTPNotFound:
image = None image = None
cache[iid] = image cache[iid] = image

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import glanceclient
import mock import mock
import novaclient import novaclient
from oslo_config import fixture as fixture_config from oslo_config import fixture as fixture_config
@ -32,7 +33,7 @@ class TestNovaClient(base.BaseTestCase):
self.nv.nova_client.flavors, 'get', self.nv.nova_client.flavors, 'get',
side_effect=self.fake_flavors_get)) side_effect=self.fake_flavors_get))
self.useFixture(mockpatch.PatchObject( self.useFixture(mockpatch.PatchObject(
self.nv.nova_client.images, 'get', self.nv.glance_client.images, 'get',
side_effect=self.fake_images_get)) side_effect=self.fake_images_get))
self.CONF = self.useFixture(fixture_config.Config()).conf self.CONF = self.useFixture(fixture_config.Config()).conf
@ -65,7 +66,7 @@ class TestNovaClient(base.BaseTestCase):
a.name = image_details[a.id][0] a.name = image_details[a.id][0]
a.metadata = image_details[a.id][1] a.metadata = image_details[a.id][1]
else: else:
raise novaclient.exceptions.NotFound('foobar') raise glanceclient.exc.HTTPNotFound('foobar')
return a return a