diff --git a/nova/db/api.py b/nova/db/api.py index 7ad02cdd4..e0aa5541c 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -372,6 +372,11 @@ def fixed_ip_disassociate_all_by_timeout(context, host, time): return IMPL.fixed_ip_disassociate_all_by_timeout(context, host, time) +def fixed_ip_get(context, id): + """Get fixed ip by id or raise if it does not exist.""" + return IMPL.fixed_ip_get(context, id) + + def fixed_ip_get_all(context): """Get all defined fixed ips.""" return IMPL.fixed_ip_get_all(context) diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 1dcd6d95c..aac288767 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -796,6 +796,25 @@ def fixed_ip_disassociate_all_by_timeout(_context, host, time): return result +@require_context +def fixed_ip_get(context, id, session=None): + if not session: + session = get_session() + result = session.query(models.FixedIp).\ + filter_by(id=id).\ + filter_by(deleted=can_read_deleted(context)).\ + options(joinedload('floating_ips')).\ + options(joinedload('network')).\ + first() + if not result: + raise exception.FixedIpNotFound(id=id) + + if is_user_context(context): + authorize_project_context(context, result.instance.project_id) + + return result + + @require_admin_context def fixed_ip_get_all(context, session=None): if not session: diff --git a/nova/test.py b/nova/test.py index d759aef60..b753f2314 100644 --- a/nova/test.py +++ b/nova/test.py @@ -56,6 +56,7 @@ LOG = log.getLogger('nova.tests') class skip_test(object): """Decorator that skips a test.""" + # TODO(tr3buchet): remember forever what comstud did here def __init__(self, msg): self.message = msg