summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Washenberger <mark.washenberger@rackspace.com>2011-04-05 16:30:30 -0400
committerMark Washenberger <mark.washenberger@rackspace.com>2011-04-05 16:30:30 -0400
commitb59f7e2b9ed0f08ac033cd839a6996a1931ccec6 (patch)
treeeb1e0662320ed788e6d2ae13ce50ad4a335ca526
parent2468743697faf81851bef1cafba95337dbd57153 (diff)
refactor to handle invalid adminPass
-rw-r--r--nova/api/openstack/servers.py11
-rw-r--r--nova/tests/api/openstack/test_servers.py20
2 files changed, 26 insertions, 5 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index c19b53b5e..8f5adaad5 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -120,6 +120,11 @@ class Controller(wsgi.Controller):
context = req.environ['nova.context']
+ password = self._get_admin_password_from_request_server(env['server'])
+ if not isinstance(password, basestring) or password == '':
+ msg = _("Invalid adminPass")
+ return exc.HTTPBadRequest(msg)
+
key_name = None
key_data = None
key_pairs = auth_manager.AuthManager.get_key_pairs(context)
@@ -180,7 +185,6 @@ class Controller(wsgi.Controller):
builder = self._get_view_builder(req)
server = builder.build(inst, is_detail=True)
- password = self._get_admin_password_from_request_server(env['server'])
server['server']['adminPass'] = password
self.compute_api.set_admin_password(context, server['server']['id'],
password)
@@ -652,10 +656,7 @@ class ControllerV11(Controller):
return common.limited_by_marker(items, req)
def _get_admin_password_from_request_server(self, server):
- password = server.get('adminPass')
- if password:
- return password
- return utils.generate_password(16)
+ return server.get('adminPass', utils.generate_password(16))
class ServerCreateRequestXMLDeserializer(object):
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index bd0bdf1b3..65e6fee51 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -553,6 +553,26 @@ class ServersTest(test.TestCase):
server = json.loads(res.body)['server']
self.assertEqual(server['adminPass'], body['server']['adminPass'])
+ def test_create_instance_with_empty_admin_pass_v11(self):
+ self._setup_for_create_instance()
+
+ imageRef = 'http://localhost/v1.1/images/2'
+ flavorRef = 'http://localhost/v1.1/flavors/3'
+ body = {
+ 'server': {
+ 'name': 'server_test',
+ 'imageRef': imageRef,
+ 'flavorRef': flavorRef,
+ 'adminPass': '',
+ },
+ }
+
+ req = webob.Request.blank('/v1.1/servers')
+ req.method = 'POST'
+ req.body = json.dumps(body)
+ req.headers['content-type'] = "application/json"
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
def test_update_no_body(self):
req = webob.Request.blank('/v1.0/servers/1')