]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Introduce nova_utils.server_to_ipaddress
authorThomas Herve <th@rackspace.com>
Fri, 16 Aug 2013 11:24:55 +0000 (13:24 +0200)
committerThomas Herve <th@rackspace.com>
Wed, 21 Aug 2013 07:15:14 +0000 (09:15 +0200)
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

heat/engine/resources/instance.py
heat/engine/resources/loadbalancer.py
heat/engine/resources/nova_utils.py

index 587040d8bf397332cba405e6632a782e1471759c..dd12eb98bfd81e63d5ff824304c9db8ab81d9721 100644 (file)
@@ -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'
 
index f0c90b9ceafd3849e74a5291602722b97077cf77..bb6640ff36ea543e0750e1491eefd1fbb8128828 100644 (file)
@@ -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,
index daf4d770a7f3f7595704c806ffd10d0d6c0dff72..56888babe919ea97c0b22877f7b38f89d041e4ea 100644 (file)
@@ -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]