diff options
| author | Brian Waldon <brian.waldon@rackspace.com> | 2011-07-21 14:27:20 +0000 |
|---|---|---|
| committer | Tarmac <> | 2011-07-21 14:27:20 +0000 |
| commit | 94a22ae4575a60e6b8096c1baeda8828feb30f3e (patch) | |
| tree | e9438ec7da425a658b4657ba3ea84beb4b69c581 /nova/api | |
| parent | a559ca7e76195a8608a1cf884c7c8101544e1bda (diff) | |
| parent | 82e2eeb5a097f1c3c6cb56fc3dfa862575f5da9a (diff) | |
- Add 'fixed_ipv6' property to VirtualInterface model
- Expose ipv6 addresses in each network in OSAPI v1.1
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/views/addresses.py | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/nova/api/openstack/views/addresses.py b/nova/api/openstack/views/addresses.py index a242efa45..ddbf7a144 100644 --- a/nova/api/openstack/views/addresses.py +++ b/nova/api/openstack/views/addresses.py @@ -15,9 +15,12 @@ # License for the specific language governing permissions and limitations # under the License. +from nova import flags from nova import utils from nova.api.openstack import common +FLAGS = flags.FLAGS + class ViewBuilder(object): """Models a server addresses response as a python dictionary.""" @@ -50,22 +53,37 @@ class ViewBuilderV11(ViewBuilder): if network_label not in networks: networks[network_label] = [] - networks[network_label].extend(self._extract_ipv4(interface)) + ip_addresses = list(self._extract_ipv4_addresses(interface)) + + if FLAGS.use_ipv6: + ipv6_address = self._extract_ipv6_address(interface) + if ipv6_address is not None: + ip_addresses.append(ipv6_address) + + networks[network_label].extend(ip_addresses) return networks def build_network(self, interfaces, network_label): for interface in interfaces: if interface['network']['label'] == network_label: - ips = self._extract_ipv4(interface) - return {network_label: list(ips)} + ips = list(self._extract_ipv4_addresses(interface)) + ipv6 = self._extract_ipv6_address(interface) + if ipv6 is not None: + ips.append(ipv6) + return {network_label: ips} return None - def _extract_ipv4(self, interface): + def _extract_ipv4_addresses(self, interface): for fixed_ip in interface['fixed_ips']: yield self._build_ip_entity(fixed_ip['address'], 4) for floating_ip in fixed_ip.get('floating_ips', []): yield self._build_ip_entity(floating_ip['address'], 4) + def _extract_ipv6_address(self, interface): + fixed_ipv6 = interface.get('fixed_ipv6') + if fixed_ipv6 is not None: + return self._build_ip_entity(fixed_ipv6, 6) + def _build_ip_entity(self, address, version): return {'addr': address, 'version': version} |
