diff options
| author | Vishvananda Ishaya <vishvananda@yahoo.com> | 2010-09-09 11:18:13 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@yahoo.com> | 2010-09-09 11:18:13 -0700 |
| commit | d4a7e6e22fafacb031d8b951bf1608888b4d18e3 (patch) | |
| tree | a2f34ec48384bef33c637b1def2e30fe53191f73 | |
| parent | 1f1422d5f262b20f4fa6266a3d62615d013d832c (diff) | |
| parent | cb0953a578b55e873a090f2ed46e879183aa3eb0 (diff) | |
merged support code from orm branch
| -rwxr-xr-x | bin/nova-manage | 34 | ||||
| -rw-r--r-- | nova/db/api.py | 25 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 36 |
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) |
