diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 2aca45c024..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) @@ -1318,6 +1321,9 @@ def _create_args_to_params(self, node, **kwargs): {})) } + 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'] @@ -2048,6 +2054,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), ), ) 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(