summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@yahoo.com>2010-09-09 11:18:13 -0700
committerVishvananda Ishaya <vishvananda@yahoo.com>2010-09-09 11:18:13 -0700
commitd4a7e6e22fafacb031d8b951bf1608888b4d18e3 (patch)
treea2f34ec48384bef33c637b1def2e30fe53191f73
parent1f1422d5f262b20f4fa6266a3d62615d013d832c (diff)
parentcb0953a578b55e873a090f2ed46e879183aa3eb0 (diff)
merged support code from orm branch
-rwxr-xr-xbin/nova-manage34
-rw-r--r--nova/db/api.py25
-rw-r--r--nova/db/sqlalchemy/api.py36
3 files changed, 84 insertions, 11 deletions
diff --git a/bin/nova-manage b/bin/nova-manage
index ecef5d555..56191252a 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -26,6 +26,8 @@ import os
import sys
import time
+import IPy
+
# If ../nova/__init__.py exists, add ../ to Python search path, so that
# it will override what happens to be installed in /usr/(local/)lib/python...
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
@@ -218,12 +220,44 @@ class ProjectCommands(object):
with open(filename, 'w') as f:
f.write(zip_file)
+class FloatingIpCommands(object):
+ """Class for managing floating ip."""
+
+ def create(self, host, range):
+ """Creates floating ips for host by range
+ arguments: host ip_range"""
+ for address in IPy.IP(range):
+ db.floating_ip_create(None, {'address': str(address),
+ 'host': host})
+
+ def delete(self, ip_range):
+ """Deletes floating ips by range
+ arguments: range"""
+ for address in IPy.IP(ip_range):
+ db.floating_ip_destroy(None, str(address))
+
+
+ def list(self, host=None):
+ """Lists all floating ips (optionally by host)
+ arguments: [host]"""
+ if host == None:
+ floating_ips = db.floating_ip_get_all(None)
+ else:
+ floating_ips = db.floating_ip_get_all_by_host(None, host)
+ for floating_ip in floating_ips:
+ instance = None
+ if floating_ip['fixed_ip']:
+ instance = floating_ip['fixed_ip']['instance']['str_id']
+ print "%s\t%s\t%s" % (floating_ip['host'],
+ floating_ip['address'],
+ instance)
CATEGORIES = [
('user', UserCommands),
('project', ProjectCommands),
('role', RoleCommands),
('vpn', VpnCommands),
+ ('floating', FloatingIpCommands)
]
diff --git a/nova/db/api.py b/nova/db/api.py
index 0cab7db8e..d81673fad 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -91,6 +91,16 @@ def floating_ip_create(context, values):
return IMPL.floating_ip_create(context, values)
+def floating_ip_deallocate(context, address):
+ """Deallocate an floating ip by address"""
+ return IMPL.floating_ip_deallocate(context, address)
+
+
+def floating_ip_destroy(context, address):
+ """Destroy the floating_ip or raise if it does not exist."""
+ return IMPL.floating_ip_destroy(context, address)
+
+
def floating_ip_disassociate(context, address):
"""Disassociate an floating ip from a fixed ip by address.
@@ -99,11 +109,6 @@ def floating_ip_disassociate(context, address):
return IMPL.floating_ip_disassociate(context, address)
-def floating_ip_deallocate(context, address):
- """Deallocate an floating ip by address"""
- return IMPL.floating_ip_deallocate(context, address)
-
-
def floating_ip_fixed_ip_associate(context, floating_address, fixed_address):
"""Associate an floating ip to a fixed_ip by address."""
return IMPL.floating_ip_fixed_ip_associate(context,
@@ -111,6 +116,16 @@ def floating_ip_fixed_ip_associate(context, floating_address, fixed_address):
fixed_address)
+def floating_ip_get_all(context):
+ """Get all floating ips."""
+ return IMPL.floating_ip_get_all(context)
+
+
+def floating_ip_get_all_by_host(context, host):
+ """Get all floating ips."""
+ return IMPL.floating_ip_get_all_by_host(context, host)
+
+
def floating_ip_get_by_address(context, address):
"""Get a floating ip by address or raise if it doesn't exist."""
return IMPL.floating_ip_get_by_address(context, address)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index e92edbeb3..4ea7a9071 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -111,6 +111,23 @@ def floating_ip_fixed_ip_associate(_context, floating_address, fixed_address):
floating_ip_ref.save(session=session)
+def floating_ip_deallocate(_context, address):
+ session = get_session()
+ with session.begin():
+ floating_ip_ref = models.FloatingIp.find_by_str(address,
+ session=session)
+ floating_ip_ref['project_id'] = None
+ floating_ip_ref.save(session=session)
+
+
+def floating_ip_destroy(_context, address):
+ session = get_session()
+ with session.begin():
+ floating_ip_ref = models.FloatingIp.find_by_str(address,
+ session=session)
+ floating_ip_ref.delete(session=session)
+
+
def floating_ip_disassociate(_context, address):
session = get_session()
with session.begin():
@@ -126,14 +143,21 @@ def floating_ip_disassociate(_context, address):
return fixed_ip_address
-def floating_ip_deallocate(_context, address):
+def floating_ip_get_all(_context):
session = get_session()
- with session.begin():
- floating_ip_ref = models.FloatingIp.find_by_str(address,
- session=session)
- floating_ip_ref['project_id'] = None
- floating_ip_ref.save(session=session)
+ return session.query(models.FloatingIp
+ ).options(joinedload_all('fixed_ip.instance')
+ ).filter_by(deleted=False
+ ).all()
+
+def floating_ip_get_all_by_host(_context, host):
+ session = get_session()
+ return session.query(models.FloatingIp
+ ).options(joinedload_all('fixed_ip.instance')
+ ).filter_by(host=host
+ ).filter_by(deleted=False
+ ).all()
def floating_ip_get_by_address(_context, address):
return models.FloatingIp.find_by_str(address)