summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorTrey Morris <treyemorris@gmail.com>2012-01-09 11:52:53 -0600
committerTrey Morris <treyemorris@gmail.com>2012-02-01 13:29:14 -0600
commit73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2 (patch)
tree571ee661373cfc18b1ca1135e2b8c36d6758c641 /nova/api
parentfced0f58bcbaef6fff76c6719e27e7d100aa721b (diff)
downloadnova-73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2.tar.gz
nova-73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2.tar.xz
nova-73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2.zip
Ties quantum, melange, and nova network model
get_instance_nw_info() now returns network model, and keeps the network info cache up to date. virt shim and translation in place for virts to get at the old stuff Change-Id: I070ea7d8564af6c644059d1c209542d250d19ddb
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/ec2utils.py44
-rw-r--r--nova/api/openstack/common.py55
-rw-r--r--nova/api/openstack/compute/ips.py1
3 files changed, 28 insertions, 72 deletions
diff --git a/nova/api/ec2/ec2utils.py b/nova/api/ec2/ec2utils.py
index 8f641e189..8a08b172a 100644
--- a/nova/api/ec2/ec2utils.py
+++ b/nova/api/ec2/ec2utils.py
@@ -65,17 +65,8 @@ def image_ec2_id(image_id, image_type='ami'):
return "ami-00000000"
-def get_ip_info_for_instance_from_cache(instance):
- if (not instance.get('info_cache') or
- not instance['info_cache'].get('network_info')):
- # NOTE(jkoelker) Raising ValueError so that we trigger the
- # fallback lookup
- raise ValueError
-
- cached_info = instance['info_cache']['network_info']
- nw_info = network_model.NetworkInfo.hydrate(cached_info)
+def get_ip_info_for_instance_from_nw_info(nw_info):
ip_info = dict(fixed_ips=[], fixed_ip6s=[], floating_ips=[])
-
for vif in nw_info:
vif_fixed_ips = vif.fixed_ips()
@@ -92,27 +83,17 @@ def get_ip_info_for_instance_from_cache(instance):
return ip_info
-def get_ip_for_instance_from_nwinfo(context, instance):
- # NOTE(jkoelker) When the network_api starts returning the model, this
- # can be refactored out into the above function
- network_api = network.API()
+def get_ip_info_for_instance_from_cache(instance):
+ if (not instance.get('info_cache') or
+ not instance['info_cache'].get('network_info')):
+ # NOTE(jkoelker) Raising ValueError so that we trigger the
+ # fallback lookup
+ raise ValueError
- def _get_floaters(ip):
- return network_api.get_floating_ips_by_fixed_address(context, ip)
+ cached_info = instance['info_cache']['network_info']
+ nw_info = network_model.NetworkInfo.hydrate(cached_info)
- ip_info = dict(fixed_ips=[], fixed_ip6s=[], floating_ips=[])
- nw_info = network_api.get_instance_nw_info(context, instance)
-
- for _net, info in nw_info:
- for ip in info['ips']:
- ip_info['fixed_ips'].append(ip['ip'])
- floaters = _get_floaters(ip['ip'])
- if floaters:
- ip_info['floating_ips'].extend(floaters)
- if 'ip6s' in info:
- for ip in info['ip6s']:
- ip_info['fixed_ip6s'].append(ip['ip'])
- return ip_info
+ return get_ip_info_for_instance_from_nw_info(nw_info)
def get_ip_info_for_instance(context, instance):
@@ -125,7 +106,10 @@ def get_ip_info_for_instance(context, instance):
# sqlalchemy FK (KeyError, AttributeError)
# fail fall back to calling out to he
# network api
- return get_ip_for_instance_from_nwinfo(context, instance)
+ network_api = network.API()
+
+ nw_info = network_api.get_instance_nw_info(context, instance)
+ return get_ip_info_for_instance_from_nw_info(nw_info)
def get_availability_zone_by_host(services, host):
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index f3aa3a564..b46a6c1eb 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -287,15 +287,7 @@ def dict_to_query_str(params):
return param_str.rstrip('&')
-def get_networks_for_instance_from_cache(instance):
- if (not instance.get('info_cache') or
- not instance['info_cache'].get('network_info')):
- # NOTE(jkoelker) Raising ValueError so that we trigger the
- # fallback lookup
- raise ValueError
-
- cached_info = instance['info_cache']['network_info']
- nw_info = network_model.NetworkInfo.hydrate(cached_info)
+def get_networks_for_instance_from_nw_info(nw_info):
networks = {}
for vif in nw_info:
@@ -310,38 +302,16 @@ def get_networks_for_instance_from_cache(instance):
return networks
-def get_networks_for_instance_from_nwinfo(context, instance):
- # NOTE(jkoelker) When the network_api starts returning the model, this
- # can be refactored out into the above function
- network_api = network.API()
-
- def _get_floats(ip):
- return network_api.get_floating_ips_by_fixed_address(context, ip)
-
- def _emit_addr(ip, version):
- return {'address': ip, 'version': version}
-
- nw_info = network_api.get_instance_nw_info(context, instance)
- networks = {}
- for _net, info in nw_info:
- net = {'ips': [], 'floating_ips': []}
- for ip in info['ips']:
- net['ips'].append(_emit_addr(ip['ip'], 4))
- floaters = _get_floats(ip['ip'])
- if floaters:
- net['floating_ips'].extend([_emit_addr(float, 4)
- for float in floaters])
- if 'ip6s' in info:
- for ip in info['ip6s']:
- net['ips'].append(_emit_addr(ip['ip'], 6))
-
- label = info['label']
- if label not in networks:
- networks[label] = {'ips': [], 'floating_ips': []}
+def get_networks_for_instance_from_cache(instance):
+ if (not instance.get('info_cache') or
+ not instance['info_cache'].get('network_info')):
+ # NOTE(jkoelker) Raising ValueError so that we trigger the
+ # fallback lookup
+ raise ValueError
- networks[label]['ips'].extend(net['ips'])
- networks[label]['floating_ips'].extend(net['floating_ips'])
- return networks
+ cached_info = instance['info_cache']['network_info']
+ nw_info = network_model.NetworkInfo.hydrate(cached_info)
+ return get_networks_for_instance_from_nw_info(nw_info)
def get_networks_for_instance(context, instance):
@@ -363,7 +333,10 @@ def get_networks_for_instance(context, instance):
# sqlalchemy FK (KeyError, AttributeError)
# fail fall back to calling out the the
# network api
- return get_networks_for_instance_from_nwinfo(context, instance)
+ network_api = network.API()
+
+ nw_info = network_api.get_instance_nw_info(context, instance)
+ return get_networks_for_instance_from_nw_info(nw_info)
def raise_http_conflict_for_instance_invalid_state(exc, action):
diff --git a/nova/api/openstack/compute/ips.py b/nova/api/openstack/compute/ips.py
index ec107914a..7e8b5ac67 100644
--- a/nova/api/openstack/compute/ips.py
+++ b/nova/api/openstack/compute/ips.py
@@ -93,7 +93,6 @@ class Controller(wsgi.Controller):
context = req.environ["nova.context"]
instance = self._get_instance(context, server_id)
networks = common.get_networks_for_instance(context, instance)
-
if id not in networks:
msg = _("Instance is not a member of specified network")
raise exc.HTTPNotFound(explanation=msg)