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:
Dan Smith
2014-05-29 13:43:10 -07:00
parent ebfa5e7d6d
commit 28224a6170
2 changed files with 13 additions and 18 deletions

View File

@@ -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()

View File

@@ -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)))