Improve OpenStack IP type resolution and improve tests Closes #738
Signed-off-by: Tomaz Muraus <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/6bb66097 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/6bb66097 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/6bb66097 Branch: refs/heads/trunk Commit: 6bb6609720a661907212a23669227cbc4caee2bd Parents: 0bcc7d6 Author: lionel <[email protected]> Authored: Wed Apr 13 15:55:59 2016 +0200 Committer: Tomaz Muraus <[email protected]> Committed: Wed Apr 13 19:03:23 2016 +0200 ---------------------------------------------------------------------- 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(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/6bb66097/libcloud/compute/drivers/openstack.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 51adf75..b4daa57 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2061,29 +2061,23 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver): 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) http://git-wip-us.apache.org/repos/asf/libcloud/blob/6bb66097/libcloud/test/compute/fixtures/openstack_v1.1/_servers_detail.json ---------------------------------------------------------------------- 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 4c31b27..cddb138 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", http://git-wip-us.apache.org/repos/asf/libcloud/blob/6bb66097/libcloud/test/compute/test_openstack.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index ee2469d..f5941b0 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -758,8 +758,11 @@ class OpenStack_1_1_Tests(unittest.TestCase, TestCaseMixin): 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 @@ class OpenStack_1_1_Tests(unittest.TestCase, TestCaseMixin): # 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)
