Make metadata password routines use Instance object
This replaces existing uses of raw conductor apis for get_by_uuid() and instance_update() with objects. Related to blueprint compute-manager-objects-juno Change-Id: I63cf0ac6636e17f2bfcd9d6a859d9ed8612a56e1
This commit is contained in:
@@ -15,8 +15,8 @@
|
||||
|
||||
from webob import exc
|
||||
|
||||
from nova import conductor
|
||||
from nova import context
|
||||
from nova import objects
|
||||
from nova.openstack.common.gettextutils import _
|
||||
from nova import utils
|
||||
|
||||
@@ -62,11 +62,8 @@ def handle_password(req, meta_data):
|
||||
msg = _("Request is too large.")
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
conductor_api = conductor.API()
|
||||
instance = conductor_api.instance_get_by_uuid(ctxt, meta_data.uuid)
|
||||
sys_meta = utils.instance_sys_meta(instance)
|
||||
sys_meta.update(convert_password(ctxt, req.body))
|
||||
conductor_api.instance_update(ctxt, meta_data.uuid,
|
||||
system_metadata=sys_meta)
|
||||
instance = objects.Instance.get_by_uuid(ctxt, meta_data.uuid)
|
||||
instance.system_metadata.update(convert_password(ctxt, req.body))
|
||||
instance.save()
|
||||
else:
|
||||
raise exc.HTTPBadRequest()
|
||||
|
||||
@@ -20,6 +20,7 @@ import base64
|
||||
import hashlib
|
||||
import hmac
|
||||
import json
|
||||
import mock
|
||||
import re
|
||||
|
||||
try:
|
||||
@@ -794,21 +795,18 @@ class MetadataPasswordTestCase(test.TestCase):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
password.handle_password, request, self.mdinst)
|
||||
|
||||
def _try_set_password(self, val='bar'):
|
||||
@mock.patch('nova.objects.Instance.get_by_uuid')
|
||||
def _try_set_password(self, get_by_uuid, val='bar'):
|
||||
request = webob.Request.blank('')
|
||||
request.method = 'POST'
|
||||
request.body = val
|
||||
self.stubs.Set(db, 'instance_get_by_uuid',
|
||||
lambda *a, **kw: {'system_metadata': []})
|
||||
get_by_uuid.return_value = self.instance
|
||||
|
||||
def fake_instance_update(context, uuid, updates):
|
||||
self.assertIn('system_metadata', updates)
|
||||
self.assertIn('password_0', updates['system_metadata'])
|
||||
return self.instance, self.instance
|
||||
with mock.patch.object(self.instance, 'save') as save:
|
||||
password.handle_password(request, self.mdinst)
|
||||
save.assert_called_once_with()
|
||||
|
||||
self.stubs.Set(db, 'instance_update_and_get_original',
|
||||
fake_instance_update)
|
||||
password.handle_password(request, self.mdinst)
|
||||
self.assertIn('password_0', self.instance.system_metadata)
|
||||
|
||||
def test_set_password(self):
|
||||
self.mdinst.password = ''
|
||||
@@ -823,4 +821,4 @@ class MetadataPasswordTestCase(test.TestCase):
|
||||
self.mdinst.password = ''
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self._try_set_password,
|
||||
'a' * (password.MAX_SIZE + 1))
|
||||
val=('a' * (password.MAX_SIZE + 1)))
|
||||
|
||||
Reference in New Issue
Block a user