diff options
| author | Trey Morris <treyemorris@gmail.com> | 2012-01-09 11:52:53 -0600 |
|---|---|---|
| committer | Trey Morris <treyemorris@gmail.com> | 2012-02-01 13:29:14 -0600 |
| commit | 73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2 (patch) | |
| tree | 571ee661373cfc18b1ca1135e2b8c36d6758c641 /nova/api | |
| parent | fced0f58bcbaef6fff76c6719e27e7d100aa721b (diff) | |
| download | nova-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.py | 44 | ||||
| -rw-r--r-- | nova/api/openstack/common.py | 55 | ||||
| -rw-r--r-- | nova/api/openstack/compute/ips.py | 1 |
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) |
