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]
|