From 59c322fe9a874bb08cc7bc0add2cc7d2bd0b2e61 Mon Sep 17 00:00:00 2001 From: lionel Date: Wed, 6 Apr 2016 14:50:01 +0200 Subject: [PATCH 1/3] Fix OpenStack IP type resolution --- libcloud/compute/drivers/openstack.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index c7756034f9..51adf75fc8 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2074,16 +2074,16 @@ def _to_node(self, api_node): # public and 'fixed' for private explicit_ip_type = value.get('OS-EXT-IPS:type', None) - if explicit_ip_type == 'floating': + if public_subnet: + # Check for public subnet + is_public_ip = True + elif explicit_ip_type == 'floating': is_public_ip = True elif explicit_ip_type == 'fixed': is_public_ip = False elif label in public_networks_labels: # Try label next is_public_ip = True - elif public_subnet: - # Check for public subnet - is_public_ip = True if is_public_ip: public_ips.append(ip) @@ -2108,6 +2108,7 @@ def _to_node(self, api_node): created_at=created, driver=self, extra=dict( + addresses=api_node['addresses'], hostId=api_node['hostId'], access_ip=api_node.get('accessIPv4'), access_ipv6=api_node.get('accessIPv6', None), From 0c6a061f04a0660e8185604f17f780fb15ace76b Mon Sep 17 00:00:00 2001 From: lionel Date: Wed, 13 Apr 2016 15:55:59 +0200 Subject: [PATCH 2/3] Improve OpenStack IP type resolution and improve tests --- libcloud/compute/drivers/openstack.py | 30 ++++++++----------- .../openstack_v1.1/_servers_detail.json | 22 ++++++++++++++ libcloud/test/compute/test_openstack.py | 13 ++++++-- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 51adf75fc8..b4daa57daf 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2061,29 +2061,23 @@ def _to_node(self, api_node): for label, values in api_node['addresses'].items(): for value in values: ip = value['addr'] - is_public_ip = False try: - public_subnet = is_public_subnet(ip) + is_public_ip = is_public_subnet(ip) except: # IPv6 - public_subnet = False - - # Openstack Icehouse sets 'OS-EXT-IPS:type' to 'floating' for - # public and 'fixed' for private - explicit_ip_type = value.get('OS-EXT-IPS:type', None) - - if public_subnet: - # Check for public subnet - is_public_ip = True - elif explicit_ip_type == 'floating': - is_public_ip = True - elif explicit_ip_type == 'fixed': - is_public_ip = False - elif label in public_networks_labels: - # Try label next - is_public_ip = True + + # Openstack Icehouse sets 'OS-EXT-IPS:type' to 'floating' for + # public and 'fixed' for private + explicit_ip_type = value.get('OS-EXT-IPS:type', None) + + if label in public_networks_labels: + is_public_ip = True + elif explicit_ip_type == 'floating': + is_public_ip = True + elif explicit_ip_type == 'fixed': + is_public_ip = False if is_public_ip: public_ips.append(ip) diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json index 4c31b27c68..cddb138bc5 100644 --- a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json +++ b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json @@ -58,6 +58,28 @@ "addr": "10.3.3.3", "version": 4 } + ], + "pubnet": [ + { + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:79:90:aa", + "OS-EXT-IPS:type": "fixed", + "addr": "1.1.1.1", + "version": 4 + }, + { + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:79:90:aa", + "OS-EXT-IPS:type": "floating", + "addr": "2.2.2.2", + "version": 4 + } + ], + "privnet": [ + { + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:79:90:aa", + "OS-EXT-IPS:type": "floating", + "addr": "172.16.1.1", + "version": 4 + } ] }, "tenant_id": "rs-reach-project", diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index ee2469d222..f5941b07fb 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -758,8 +758,11 @@ def test_list_nodes(self): self.assertTrue('12.16.18.28' in node.public_ips) self.assertTrue('50.57.94.35' in node.public_ips) - # floating ip - self.assertTrue('192.168.3.3' in node.public_ips) + # fixed public ip + self.assertTrue('1.1.1.1' in node.public_ips) + + # floating public ip + self.assertTrue('2.2.2.2' in node.public_ips) # test public IPv6 self.assertTrue( @@ -768,9 +771,13 @@ def test_list_nodes(self): # test private IPv4 self.assertTrue('10.182.64.34' in node.private_ips) - # floating ip + # fixed private ip self.assertTrue('10.3.3.3' in node.private_ips) + # floating private ip + self.assertTrue('192.168.3.3' in node.private_ips) + self.assertTrue('172.16.1.1' in node.private_ips) + # test private IPv6 self.assertTrue( 'fec0:4801:7808:52:16:3eff:fe60:187d' in node.private_ips) From 4da32b7a91656e032483754e15a8abc4f521766f Mon Sep 17 00:00:00 2001 From: lionel Date: Wed, 13 Apr 2016 16:09:06 +0200 Subject: [PATCH 3/3] minor pep8 fix --- libcloud/compute/drivers/openstack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index b4daa57daf..1fa34798b3 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2068,8 +2068,8 @@ def _to_node(self, api_node): except: # IPv6 - # Openstack Icehouse sets 'OS-EXT-IPS:type' to 'floating' for - # public and 'fixed' for private + # Openstack Icehouse sets 'OS-EXT-IPS:type' to 'floating' + # for public and 'fixed' for private explicit_ip_type = value.get('OS-EXT-IPS:type', None) if label in public_networks_labels: