diff options
-rw-r--r-- | nova/api/openstack/compute/servers.py | 10 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/test_servers.py | 52 |
2 files changed, 60 insertions, 2 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 1b0ad9463..0b37b5c57 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -776,12 +776,18 @@ class Controller(wsgi.Controller): if 'accessIPv4' in body['server']: access_ipv4 = body['server']['accessIPv4'] - self._validate_access_ipv4(access_ipv4) + if access_ipv4 is None: + access_ipv4 = '' + if access_ipv4: + self._validate_access_ipv4(access_ipv4) update_dict['access_ip_v4'] = access_ipv4.strip() if 'accessIPv6' in body['server']: access_ipv6 = body['server']['accessIPv6'] - self._validate_access_ipv6(access_ipv6) + if access_ipv6 is None: + access_ipv6 = '' + if access_ipv6: + self._validate_access_ipv6(access_ipv6) update_dict['access_ip_v6'] = access_ipv6.strip() if 'auto_disk_config' in body['server']: diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py index 5b9fdc3d2..1d97f86fa 100644 --- a/nova/tests/api/openstack/compute/test_servers.py +++ b/nova/tests/api/openstack/compute/test_servers.py @@ -937,6 +937,32 @@ class ServersControllerTest(test.TestCase): self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update, req, FAKE_UUID, body) + def test_update_server_access_ipv4_none(self): + self.stubs.Set(nova.db, 'instance_get', + fakes.fake_instance_get(access_ipv4='0.0.0.0')) + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'PUT' + req.content_type = 'application/json' + body = {'server': {'accessIPv4': None}} + req.body = jsonutils.dumps(body) + res_dict = self.controller.update(req, FAKE_UUID, body) + + self.assertEqual(res_dict['server']['id'], FAKE_UUID) + self.assertEqual(res_dict['server']['accessIPv4'], '') + + def test_update_server_access_ipv4_blank(self): + self.stubs.Set(nova.db, 'instance_get', + fakes.fake_instance_get(access_ipv4='0.0.0.0')) + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'PUT' + req.content_type = 'application/json' + body = {'server': {'accessIPv4': ''}} + req.body = jsonutils.dumps(body) + res_dict = self.controller.update(req, FAKE_UUID, body) + + self.assertEqual(res_dict['server']['id'], FAKE_UUID) + self.assertEqual(res_dict['server']['accessIPv4'], '') + def test_update_server_access_ipv6(self): self.stubs.Set(nova.db, 'instance_get', fakes.fake_instance_get(access_ipv6='beef::0123')) @@ -961,6 +987,32 @@ class ServersControllerTest(test.TestCase): self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update, req, FAKE_UUID, body) + def test_update_server_access_ipv6_none(self): + self.stubs.Set(nova.db, 'instance_get', + fakes.fake_instance_get(access_ipv6='beef::0123')) + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'PUT' + req.content_type = 'application/json' + body = {'server': {'accessIPv6': None}} + req.body = jsonutils.dumps(body) + res_dict = self.controller.update(req, FAKE_UUID, body) + + self.assertEqual(res_dict['server']['id'], FAKE_UUID) + self.assertEqual(res_dict['server']['accessIPv6'], '') + + def test_update_server_access_ipv6_blank(self): + self.stubs.Set(nova.db, 'instance_get', + fakes.fake_instance_get(access_ipv6='beef::0123')) + req = fakes.HTTPRequest.blank('/v2/fake/servers/%s' % FAKE_UUID) + req.method = 'PUT' + req.content_type = 'application/json' + body = {'server': {'accessIPv6': ''}} + req.body = jsonutils.dumps(body) + res_dict = self.controller.update(req, FAKE_UUID, body) + + self.assertEqual(res_dict['server']['id'], FAKE_UUID) + self.assertEqual(res_dict['server']['accessIPv6'], '') + def test_update_server_adminPass_ignored(self): inst_dict = dict(name='server_test', adminPass='bacon') body = dict(server=inst_dict) |