From d384da2b61fcfc32a78bef979b9502358538cd37 Mon Sep 17 00:00:00 2001 From: Rashit Azizbaev Date: Fri, 16 May 2014 00:34:27 +0400 Subject: [PATCH 1/4] [LIBCLOUD-555] Added support for openstack compute availability zone --- libcloud/compute/drivers/openstack.py | 4 ++++ ...ervers_26f7fbee_8ce1_4c28_887a_bfe8e4bb10fe.json | 3 ++- libcloud/test/compute/test_openstack.py | 13 +++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 2aca45c024..fcdafee174 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -1318,6 +1318,9 @@ def _create_args_to_params(self, node, **kwargs): {})) } + if 'availability_zone' in kwargs: + server_params['availability_zone'] = kwargs['availability_zone'] + if 'ex_keyname' in kwargs: server_params['key_name'] = kwargs['ex_keyname'] @@ -2048,6 +2051,7 @@ def _to_node(self, api_node): updated=api_node['updated'], key_name=api_node.get('key_name', None), disk_config=api_node.get('OS-DCF:diskConfig', None), + availability_zone=api_node.get('OS-EXT-AZ:availability_zone', None), ), ) diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_26f7fbee_8ce1_4c28_887a_bfe8e4bb10fe.json b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_26f7fbee_8ce1_4c28_887a_bfe8e4bb10fe.json index f857f5214c..d972cfd66c 100644 --- a/libcloud/test/compute/fixtures/openstack_v1.1/_servers_26f7fbee_8ce1_4c28_887a_bfe8e4bb10fe.json +++ b/libcloud/test/compute/fixtures/openstack_v1.1/_servers_26f7fbee_8ce1_4c28_887a_bfe8e4bb10fe.json @@ -45,7 +45,8 @@ "metadata": { "My Server Name" : "Apache1" }, - "OS-DCF:diskConfig": "AUTO" + "OS-DCF:diskConfig": "AUTO", + "OS-EXT-AZ:availability_zone": "testaz" } } diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index ef5dfc7824..6f5af3c3cd 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -1076,6 +1076,19 @@ def test_create_node_with_ex_keyname_and_ex_userdata(self): self.assertEqual(node.extra['metadata']['My Server Name'], 'Apache1') self.assertEqual(node.extra['key_name'], 'devstack') + def test_create_node_with_availability_zone(self): + image = NodeImage( + id=11, name='Ubuntu 8.10 (intrepid)', driver=self.driver) + size = NodeSize( + 1, '256 slice', None, None, None, None, driver=self.driver) + node = self.driver.create_node(name='racktest', image=image, size=size, + availability_zone='testaz') + self.assertEqual(node.id, '26f7fbee-8ce1-4c28-887a-bfe8e4bb10fe') + self.assertEqual(node.name, 'racktest') + self.assertEqual(node.extra['password'], 'racktestvJq7d3') + self.assertEqual(node.extra['metadata']['My Server Name'], 'Apache1') + self.assertEqual(node.extra['availability_zone'], 'testaz') + def test_create_node_with_ex_disk_config(self): OpenStack_1_1_MockHttp.type = 'EX_DISK_CONFIG' image = NodeImage( From d632c5ecdd419d3812f875e8390ddffe4a72f262 Mon Sep 17 00:00:00 2001 From: Rashit Azizbaev Date: Fri, 16 May 2014 01:34:32 +0400 Subject: [PATCH 2/4] Fix E501 line too long --- libcloud/compute/drivers/openstack.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index fcdafee174..5df246c966 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2051,7 +2051,8 @@ def _to_node(self, api_node): updated=api_node['updated'], key_name=api_node.get('key_name', None), disk_config=api_node.get('OS-DCF:diskConfig', None), - availability_zone=api_node.get('OS-EXT-AZ:availability_zone', None), + availability_zone=api_node.get('OS-EXT-AZ:availability_zone', + None), ), ) From edb3ef9fd4225424694ea6bd2e599cf9da12154f Mon Sep 17 00:00:00 2001 From: Rashit Azizbaev Date: Fri, 16 May 2014 17:46:19 +0400 Subject: [PATCH 3/4] Add ex_ prefix to availability_zone --- 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 5df246c966..b9ef2b8b0a 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -1318,8 +1318,8 @@ def _create_args_to_params(self, node, **kwargs): {})) } - if 'availability_zone' in kwargs: - server_params['availability_zone'] = kwargs['availability_zone'] + if 'ex_availability_zone' in kwargs: + server_params['availability_zone'] = kwargs['ex_availability_zone'] if 'ex_keyname' in kwargs: server_params['key_name'] = kwargs['ex_keyname'] From c6a5bb70a04cf181daa153c73c14599a01a41441 Mon Sep 17 00:00:00 2001 From: Rashit Azizbaev Date: Fri, 16 May 2014 17:50:12 +0400 Subject: [PATCH 4/4] Added docstring for ex_availability_zone --- libcloud/compute/drivers/openstack.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index b9ef2b8b0a..27f1acec5d 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -1247,6 +1247,9 @@ def create_node(self, **kwargs): :keyword ex_disk_config: Name of the disk configuration. Can be either ``AUTO`` or ``MANUAL``. :type ex_disk_config: ``str`` + + :keyword ex_availability_zone: Nova availability zone for the node + :type ex_availability_zone: ``str`` """ server_params = self._create_args_to_params(None, **kwargs)