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

View File

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