From 3c702e38e9a51a15a8d1626b60f610c75cb1f8b7 Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Fri, 14 Dec 2012 22:23:44 +0100 Subject: [PATCH] Standardise client imports Do all client imports once, in the clients module, using the normal OpenStack idiom for optional imports where appropriate. Change-Id: I1186eba21159fe20e80c1947779fd164dada5880 Signed-off-by: Zane Bitter --- heat/engine/clients.py | 33 +++++++++++-------------- heat/engine/resources/eip.py | 6 ++--- heat/engine/resources/instance.py | 8 +++--- heat/engine/resources/loadbalancer.py | 4 +-- heat/engine/resources/s3.py | 12 +++------ heat/engine/resources/security_group.py | 9 +++---- heat/engine/resources/volume.py | 5 ++-- 7 files changed, 33 insertions(+), 44 deletions(-) diff --git a/heat/engine/clients.py b/heat/engine/clients.py index 63b4c54a..c28f796e 100644 --- a/heat/engine/clients.py +++ b/heat/engine/clients.py @@ -13,28 +13,23 @@ # License for the specific language governing permissions and limitations # under the License. +from heat.openstack.common import log as logging + +logger = logging.getLogger(__name__) -from novaclient.v1_1 import client as nc -# swiftclient not available in all distributions - make s3 an optional -# feature +from heat.common import heat_keystoneclient as hkc +from novaclient.v1_1 import client as novaclient try: from swiftclient import client as swiftclient - swiftclient_present = True except ImportError: - swiftclient_present = False -# quantumclient not available in all distributions - make quantum an optional -# feature + swiftclient = None + logger.info('swiftclient not available') try: from quantumclient.v2_0 import client as quantumclient - quantumclient_present = True except ImportError: - quantumclient_present = False - -from heat.common import heat_keystoneclient as kc -from heat.openstack.common import log as logging - -logger = logging.getLogger(__name__) + quantumclient = None + logger.info('quantumclient not available') class Clients(object): @@ -53,7 +48,7 @@ class Clients(object): if self._keystone: return self._keystone - self._keystone = kc.KeystoneClient(self.context) + self._keystone = hkc.KeystoneClient(self.context) return self._keystone def nova(self, service_type='compute'): @@ -85,20 +80,20 @@ class Clients(object): # Workaround for issues with python-keyring, need no_cache=True # ref https://bugs.launchpad.net/python-novaclient/+bug/1020238 # TODO(shardy): May be able to remove when the bug above is fixed - client = nc.Client(no_cache=True, **args) + client = novaclient.Client(no_cache=True, **args) client.authenticate() self._nova[service_type] = client except TypeError: # for compatibility with essex, which doesn't have no_cache=True # TODO(shardy): remove when we no longer support essex - client = nc.Client(**args) + client = novaclient.Client(**args) client.authenticate() self._nova[service_type] = client return client def swift(self): - if swiftclient_present == False: + if swiftclient is None: return None if self._swift: return self._swift @@ -137,7 +132,7 @@ class Clients(object): return self._swift def quantum(self): - if quantumclient_present == False: + if quantumclient is None: return None if self._quantum: logger.debug('using existing _quantum') diff --git a/heat/engine/resources/eip.py b/heat/engine/resources/eip.py index dab1bbc1..0bcb2e62 100644 --- a/heat/engine/resources/eip.py +++ b/heat/engine/resources/eip.py @@ -13,9 +13,9 @@ # License for the specific language governing permissions and limitations # under the License. +from heat.engine import clients from heat.common import exception from heat.engine import resource -from novaclient.exceptions import NotFound from heat.openstack.common import log as logging @@ -36,7 +36,7 @@ class ElasticIp(resource.Resource): if self.resource_id is not None: try: ips = self.nova().floating_ips.get(self.resource_id) - except NotFound as ex: + except clients.novaclient.exceptions.NotFound as ex: logger.warn("Floating IPs not found: %s" % str(ex)) else: self.ipaddress = ips.ip @@ -97,7 +97,7 @@ class ElasticIpAssociation(resource.Resource): server = self.nova().servers.get(self.properties['InstanceId']) if server: server.remove_floating_ip(self.properties['EIP']) - except NotFound as ex: + except clients.novaclient.exceptions.NotFound as ex: pass diff --git a/heat/engine/resources/instance.py b/heat/engine/resources/instance.py index 7ff0b0f2..077c087d 100644 --- a/heat/engine/resources/instance.py +++ b/heat/engine/resources/instance.py @@ -18,10 +18,10 @@ import os import json from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText -from novaclient.exceptions import NotFound import pkgutil from urlparse import urlparse +from heat.engine import clients from heat.engine import resource from heat.common import exception @@ -129,7 +129,7 @@ class Instance(resource.Resource): if self.ipaddress is None: try: server = self.nova().servers.get(self.resource_id) - except NotFound as ex: + except clients.novaclient.exceptions.NotFound as ex: logger.warn('Instance IP address not found (%s)' % str(ex)) else: self._set_ipaddress(server.networks) @@ -305,14 +305,14 @@ class Instance(resource.Resource): return try: server = self.nova().servers.get(self.resource_id) - except NotFound: + except clients.novaclient.exceptions.NotFound: pass else: server.delete() while server.status == 'ACTIVE': try: server.get() - except NotFound: + except clients.novaclient.exceptions.NotFound: break eventlet.sleep(0.2) self.resource_id = None diff --git a/heat/engine/resources/loadbalancer.py b/heat/engine/resources/loadbalancer.py index 4ebe535d..19ea37c6 100644 --- a/heat/engine/resources/loadbalancer.py +++ b/heat/engine/resources/loadbalancer.py @@ -13,10 +13,10 @@ # License for the specific language governing permissions and limitations # under the License. +from heat.engine import clients from heat.common import exception from heat.common import template_format from heat.engine.resources import stack -from novaclient.exceptions import NotFound from heat.openstack.common import log as logging @@ -212,7 +212,7 @@ class LoadBalancer(stack.Stack): ''' try: server = self.nova().servers.get(inst) - except NotFound as ex: + except clients.novaclient.exceptions.NotFound as ex: logger.warn('Instance (%s) not found: %s' % (inst, str(ex))) else: for n in server.networks: diff --git a/heat/engine/resources/s3.py b/heat/engine/resources/s3.py index b0c89761..97bd847e 100644 --- a/heat/engine/resources/s3.py +++ b/heat/engine/resources/s3.py @@ -20,11 +20,7 @@ from urlparse import urlparse from heat.common import exception from heat.engine import resource from heat.openstack.common import log as logging -try: - from swiftclient.client import ClientException - swiftclient_present = True -except ImportError: - swiftclient_present = False +from heat.engine import clients logger = logging.getLogger(__name__) @@ -55,9 +51,9 @@ class S3Bucket(resource.Resource): Validate any of the provided params ''' #check if swiftclient is installed - if swiftclient_present == False: + if clients.swiftclient is None: return {'Error': - 'S3 services unavaialble because of missing swiftclient.'} + 'S3 services unavailable because of missing swiftclient.'} @staticmethod def _create_container_name(resource_name): @@ -107,7 +103,7 @@ class S3Bucket(resource.Resource): if self.resource_id is not None: try: self.swift().delete_container(self.resource_id) - except ClientException as ex: + except clients.swiftclient.ClientException as ex: logger.warn("Delete container failed: %s" % str(ex)) def FnGetRefId(self): diff --git a/heat/engine/resources/security_group.py b/heat/engine/resources/security_group.py index d648fa7c..287c0244 100644 --- a/heat/engine/resources/security_group.py +++ b/heat/engine/resources/security_group.py @@ -13,8 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. -from novaclient.exceptions import BadRequest -from novaclient.exceptions import NotFound +from heat.engine import clients from heat.engine import resource from heat.openstack.common import log as logging @@ -58,7 +57,7 @@ class SecurityGroup(resource.Resource): i['FromPort'], i['ToPort'], i['CidrIp']) - except BadRequest as ex: + except clients.novaclient.exceptions.BadRequest as ex: if ex.message.find('already exists') >= 0: # no worries, the rule is already there pass @@ -73,13 +72,13 @@ class SecurityGroup(resource.Resource): if self.resource_id is not None: try: sec = self.nova().security_groups.get(self.resource_id) - except NotFound: + except clients.novaclient.exceptions.NotFound: pass else: for rule in sec.rules: try: self.nova().security_group_rules.delete(rule['id']) - except NotFound: + except clients.novaclient.exceptions.NotFound: pass self.nova().security_groups.delete(sec) diff --git a/heat/engine/resources/volume.py b/heat/engine/resources/volume.py index aace5486..f4b88f23 100644 --- a/heat/engine/resources/volume.py +++ b/heat/engine/resources/volume.py @@ -16,9 +16,9 @@ import eventlet from heat.openstack.common import log as logging +from heat.engine import clients from heat.common import exception from heat.engine import resource -from novaclient.exceptions import NotFound logger = logging.getLogger(__name__) @@ -117,10 +117,9 @@ class VolumeAttachment(resource.Resource): except Exception: pass vol.get() - except NotFound as e: + except clients.novaclient.exceptions.NotFound as e: logger.warning('Deleting VolumeAttachment %s %s - not found' % (server_id, volume_id)) - return def resource_mapping(): -- 2.45.2