diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-01 20:16:03 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-01 20:16:03 +0000 |
| commit | 1f04570c35497a76eb05865614506e224da95ea9 (patch) | |
| tree | 4628e2eba0aa3b33e8d92cd4ebf20506e390b240 /nova/api | |
| parent | ecbc3322082a0c054a61cb2bcaa5969aa1e3e974 (diff) | |
| parent | 73fd7abacd3bc5492b0335b3bb71c16b4a9d30e2 (diff) | |
Merge "Ties quantum, melange, and nova network model"
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) |
