Relax restrictions on server name

The server name is designed to be anything the user would like it to
be, so should be validated against name, not hostname. This is how
v2.0 worked, and v2.1 schema validation accidentally went over the top
here. v2.1 regressed at  f40b6a1d5c

Change-Id: Ia32a452ab3a5d7cd5a5289e8e8bf9f8e5e404780
Partial-Bug: #1491511
This commit is contained in:
Sean Dague 2015-09-03 14:53:35 -04:00 committed by He Jie Xu
parent 0391a19d0f
commit a0aeaa0e5b
3 changed files with 41 additions and 3 deletions

View File

@ -21,7 +21,7 @@ base_create = {
'server': {
'type': 'object',
'properties': {
'name': parameter_types.hostname,
'name': parameter_types.name,
'imageRef': parameter_types.image_ref,
'flavorRef': parameter_types.flavor_ref,
'adminPass': parameter_types.admin_password,
@ -56,7 +56,7 @@ base_update = {
'server': {
'type': 'object',
'properties': {
'name': parameter_types.hostname,
'name': parameter_types.name,
},
'additionalProperties': False,
},
@ -71,7 +71,7 @@ base_rebuild = {
'rebuild': {
'type': 'object',
'properties': {
'name': parameter_types.hostname,
'name': parameter_types.name,
'imageRef': parameter_types.image_ref,
'adminPass': parameter_types.admin_password,
'metadata': parameter_types.metadata,

View File

@ -1397,6 +1397,11 @@ class ServersControllerUpdateTest(ControllerTest):
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
req, FAKE_UUID, body)
def test_update_server_name_with_spaces_in_the_middle(self):
body = {'server': {'name': 'abc def'}}
req = self._get_request(body)
self.controller.update(req, FAKE_UUID, body)
def test_update_server_personality(self):
body = {
'server': {
@ -1626,6 +1631,11 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
self.controller._action_rebuild,
self.req, FAKE_UUID, self.body)
def test_rebuild_instance_name_with_spaces_in_middle(self):
self.body['rebuild']['name'] = 'abc def'
self.req.body = jsonutils.dumps(self.body)
self.controller._action_rebuild(self.req, FAKE_UUID, self.body)
def test_rebuild_instance_with_metadata_key_too_long(self):
self.body['rebuild']['accessIPv4'] = '0.0.0.0'
self.body['rebuild']['accessIPv6'] = 'fead::1234'
@ -2211,6 +2221,11 @@ class ServersControllerCreateTest(test.TestCase):
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, self.req, self.body)
def test_create_instance_name_with_spaces_in_middle(self):
self.body['server']['name'] = 'abc def'
self.req.body = jsonutils.dumps(self.body)
self.controller.create(self.req, self.body)
def test_create_instance_name_too_long(self):
self.body['server']['name'] = 'X' * 256
self.req.body = jsonutils.dumps(self.body)

View File

@ -1520,6 +1520,11 @@ class ServersControllerRebuildInstanceTest(ControllerTest):
self.req.method = 'POST'
self.req.headers["content-type"] = "application/json"
def test_rebuild_instance_name_with_spaces_in_the_middle(self):
self.body['rebuild']['name'] = 'abc def'
self.req.body = jsonutils.dumps(self.body)
self.controller._action_rebuild(self.req, FAKE_UUID, body=self.body)
def test_rebuild_instance_with_blank_metadata_key(self):
self.body['rebuild']['metadata'][''] = 'world'
self.req.body = jsonutils.dumps(self.body)
@ -1822,6 +1827,16 @@ class ServersControllerUpdateTest(ControllerTest):
self.assertRaises(exception.ValidationError, self.controller.update,
req, FAKE_UUID, body=body)
def test_update_server_name_with_spaces_in_the_middle(self):
self.stubs.Set(db, 'instance_get',
fakes.fake_instance_get(name='server_test'))
req = fakes.HTTPRequest.blank('/fake/servers/%s' % FAKE_UUID)
req.method = 'PUT'
req.content_type = 'application/json'
body = {'server': {'name': 'abc def'}}
req.body = jsonutils.dumps(body)
self.controller.update(req, FAKE_UUID, body=body)
def test_update_server_admin_password_extra_arg(self):
inst_dict = dict(name='server_test', admin_password='bacon')
body = dict(server=inst_dict)
@ -2364,6 +2379,14 @@ class ServersControllerCreateTest(test.TestCase):
self.assertRaises(exception.ValidationError, self.controller.create,
self.req, body=self.body)
def test_create_instance_name_with_spaces_in_the_middle(self):
# proper local hrefs must start with 'http://localhost/v2/'
image_href = 'http://localhost/v2/images/%s' % self.image_uuid
self.body['server']['name'] = 'abc def'
self.body['server']['imageRef'] = image_href
self.req.body = jsonutils.dumps(self.body)
self.controller.create(self.req, body=self.body)
def test_create_instance_name_all_blank_spaces(self):
# proper local hrefs must start with 'http://localhost/v2/'
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'