summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/servers.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index af6d9c7d6..4468af401 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -1145,15 +1145,20 @@ class Controller(wsgi.Controller):
def _get_server_admin_password(self, server):
"""Determine the admin password for a server on creation."""
- password = server.get('adminPass')
+ try:
+ password = server['adminPass']
+ self._validate_admin_password(password)
+ except KeyError:
+ password = utils.generate_password(FLAGS.password_length)
+ except ValueError:
+ raise exc.HTTPBadRequest(explanation=_("Invalid adminPass"))
- if password is None:
- return utils.generate_password(FLAGS.password_length)
- if not isinstance(password, basestring) or password == '':
- msg = _("Invalid adminPass")
- raise exc.HTTPBadRequest(explanation=msg)
return password
+ def _validate_admin_password(self, password):
+ if not isinstance(password, basestring):
+ raise ValueError()
+
def _get_server_search_options(self):
"""Return server search options allowed by non-admin."""
return ('reservation_id', 'name', 'status', 'image', 'flavor',