summaryrefslogtreecommitdiffstats
path: root/nova/db
diff options
context:
space:
mode:
Diffstat (limited to 'nova/db')
-rw-r--r--nova/db/api.py5
-rw-r--r--nova/db/sqlalchemy/api.py23
2 files changed, 28 insertions, 0 deletions
diff --git a/nova/db/api.py b/nova/db/api.py
index 04786a1fb..45686d9ef 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -466,6 +466,11 @@ def fixed_ip_get_by_address(context, address):
return IMPL.fixed_ip_get_by_address(context, address)
+def fixed_ip_get_by_address_detailed(context, address):
+ """Get detailed fixed ip info by address or raise if it does not exist."""
+ return IMPL.fixed_ip_get_by_address_detailed(context, address)
+
+
def fixed_ip_get_by_instance(context, instance_uuid):
"""Get fixed ips by instance or raise if none exist."""
return IMPL.fixed_ip_get_by_instance(context, instance_uuid)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 72caad74d..bc92aaa62 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1151,6 +1151,29 @@ def fixed_ip_get_by_address(context, address, session=None):
return result
+@require_admin_context
+def fixed_ip_get_by_address_detailed(context, address, session=None):
+ # This method returns a tuple of (models.FixedIp, models.Network,
+ # models.Instance).
+ if not session:
+ session = get_session()
+
+ result = session.query(models.FixedIp, models.Network, models.Instance).\
+ filter_by(address=address).\
+ outerjoin((models.Network,
+ models.Network.id ==
+ models.FixedIp.network_id)).\
+ outerjoin((models.Instance,
+ models.Instance.uuid ==
+ models.FixedIp.instance_uuid)).\
+ first()
+
+ if not result:
+ raise exception.FixedIpNotFoundForAddress(address=address)
+
+ return result
+
+
@require_context
def fixed_ip_get_by_instance(context, instance_uuid):
if not uuidutils.is_uuid_like(instance_uuid):