summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Berendt <berendt@b1-systems.de>2011-02-18 11:44:06 +0100
committerChristian Berendt <berendt@b1-systems.de>2011-02-18 11:44:06 +0100
commit205810c3da4652fd0f5203f53299cd998ac7cf82 (patch)
tree1f546c2a95591524ef8e18b89051a764701b0fc2
parent5dfa5ce7d1374509fea51f8d0b132ea865f34dc6 (diff)
downloadnova-205810c3da4652fd0f5203f53299cd998ac7cf82.tar.gz
nova-205810c3da4652fd0f5203f53299cd998ac7cf82.tar.xz
nova-205810c3da4652fd0f5203f53299cd998ac7cf82.zip
added functionality to list only fixed ip addresses of one node and added exception handling to list method
# nova-manage fixed list XXXX network IP address MAC address hostname host 10.xx.xx.0/24 10.xx.xx.5 02:16:3e:3f:33:b6 i-00000547 XXXX 10.xx.xx.0/24 10.xx.xx.9 02:16:3e:14:03:d6 i-00000548 XXXX 10.xx.xx.0/24 10.xx.xx.12 02:16:3e:20:1b:e7 i-00000549 XXXX
-rwxr-xr-xbin/nova-manage19
-rw-r--r--nova/db/api.py5
-rw-r--r--nova/db/sqlalchemy/api.py22
3 files changed, 39 insertions, 7 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index 6d67252b8..60a00f1cf 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -439,10 +439,15 @@ class FixedIpCommands(object):
def list(self, host=None):
"""Lists all fixed ips (optionally by host) arguments: [host]"""
ctxt = context.get_admin_context()
- if host == None:
- fixed_ips = db.fixed_ip_get_all(ctxt)
- else:
- fixed_ips = db.fixed_ip_get_all_by_host(ctxt, host)
+
+ try:
+ if host == None:
+ fixed_ips = db.fixed_ip_get_all(ctxt)
+ else:
+ fixed_ips = db.fixed_ip_get_all_by_host(ctxt, host)
+ except exception.NotFound as ex:
+ print "error: %s" % ex
+ sys.exit(2)
print "%-18s\t%-15s\t%-17s\t%-15s\t%s" % (_('network'),
_('IP address'),
@@ -459,9 +464,9 @@ class FixedIpCommands(object):
host = instance['host']
mac_address = instance['mac_address']
print "%-18s\t%-15s\t%-17s\t%-15s\t%s" % (
- fixed_ip['network']['cidr'],
- fixed_ip['address'],
- mac_address, hostname, host)
+ fixed_ip['network']['cidr'],
+ fixed_ip['address'],
+ mac_address, hostname, host)
class FloatingIpCommands(object):
diff --git a/nova/db/api.py b/nova/db/api.py
index d7f3746d2..6053c0352 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -293,6 +293,11 @@ def fixed_ip_get_all(context):
return IMPL.fixed_ip_get_all(context)
+def fixed_ip_get_all_by_host(context, host):
+ """Get all defined fixed ips used by a host."""
+ return IMPL.fixed_ip_get_all_by_host(context, host)
+
+
def fixed_ip_get_by_address(context, address):
"""Get a fixed ip by address or raise if it does not exist."""
return IMPL.fixed_ip_get_by_address(context, address)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 2697fac73..d07c53759 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -594,6 +594,28 @@ def fixed_ip_get_all(context, session=None):
return result
+@require_admin_context
+def fixed_ip_get_all_by_host(context, host=None):
+ session = get_session()
+
+ # FIXME: I'm sure that SQLAlchemy can handle this in a nicer way
+ instances = session.query(models.Instance).\
+ filter_by(state=1).\
+ filter_by(host=host).\
+ all()
+
+ result = []
+ for instance in instances:
+ result.append(session.query(models.FixedIp).\
+ filter_by(instance_id=instance['id']).\
+ first())
+
+ if not result:
+ raise exception.NotFound(_('No fixed ips for this host defined'))
+
+ return result
+
+
@require_context
def fixed_ip_get_by_address(context, address, session=None):
if not session: