From: Thomas Herve Date: Fri, 16 Aug 2013 11:24:55 +0000 (+0200) Subject: Introduce nova_utils.server_to_ipaddress X-Git-Tag: 2014.1~184^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=c4018585871a56458cf4e223306430fc7bb178fa;p=openstack-build%2Fheat-build.git Introduce nova_utils.server_to_ipaddress Create a utility function used for now by the instance and load balancer resources to retrieve one IP of a nova server. Change-Id: I87ace4c61b03a66f3b0c30f3bacd2fce79332ed0 --- diff --git a/heat/engine/resources/instance.py b/heat/engine/resources/instance.py index 587040d8..dd12eb98 100644 --- a/heat/engine/resources/instance.py +++ b/heat/engine/resources/instance.py @@ -158,12 +158,8 @@ class Instance(resource.Resource): Return the server's IP address, fetching it from Nova if necessary ''' if self.ipaddress is None: - try: - server = self.nova().servers.get(self.resource_id) - except clients.novaclient.exceptions.NotFound as ex: - logger.warn('Instance IP address not found (%s)' % str(ex)) - else: - self._set_ipaddress(server.networks) + self.ipaddress = nova_utils.server_to_ipaddress( + self.nova(), self.resource_id) return self.ipaddress or '0.0.0.0' diff --git a/heat/engine/resources/loadbalancer.py b/heat/engine/resources/loadbalancer.py index f0c90b9c..bb6640ff 100644 --- a/heat/engine/resources/loadbalancer.py +++ b/heat/engine/resources/loadbalancer.py @@ -14,8 +14,8 @@ # under the License. from heat.common import template_format -from heat.engine import clients from heat.engine import stack_resource +from heat.engine.resources import nova_utils from heat.openstack.common import log as logging @@ -254,21 +254,6 @@ class LoadBalancer(stack_resource.StackResource): update_allowed_keys = ('Properties',) update_allowed_properties = ('Instances',) - def _instance_to_ipaddress(self, inst): - ''' - Return the server's IP address, fetching it from Nova - ''' - try: - server = self.nova().servers.get(inst) - except clients.novaclient.exceptions.NotFound as ex: - logger.warn('Instance (%s) not found: %s' % (inst, str(ex))) - else: - for n in server.networks: - if len(server.networks[n]) > 0: - return server.networks[n][0] - - return '0.0.0.0' - def _haproxy_config(self, templ, instances): # initial simplifications: # - only one Listener @@ -321,8 +306,9 @@ class LoadBalancer(stack_resource.StackResource): servers = [] n = 1 + client = self.nova() for i in instances: - ip = self._instance_to_ipaddress(i) + ip = nova_utils.server_to_ipaddress(client, i) or '0.0.0.0' logger.debug('haproxy server:%s' % ip) servers.append('%sserver server%d %s:%s %s' % (spaces, n, ip, inst_port, diff --git a/heat/engine/resources/nova_utils.py b/heat/engine/resources/nova_utils.py index daf4d770..56888bab 100644 --- a/heat/engine/resources/nova_utils.py +++ b/heat/engine/resources/nova_utils.py @@ -219,3 +219,17 @@ def check_resize(server, flavor): raise exception.Error( _("Resizing to '%(flavor)s' failed, status '%(status)s'") % dict(flavor=flavor, status=server.status)) + + +def server_to_ipaddress(client, server): + ''' + Return the server's IP address, fetching it from Nova. + ''' + try: + server = client.servers.get(server) + except clients.novaclient.exceptions.NotFound as ex: + logger.warn('Instance (%s) not found: %s' % (server, str(ex))) + else: + for n in server.networks: + if len(server.networks[n]) > 0: + return server.networks[n][0]