From 303803ca29b7676d544e4c1988eb467bc8d2e0b9 Mon Sep 17 00:00:00 2001 From: Jordan Rinke Date: Mon, 24 Jan 2011 14:24:22 -0800 Subject: Added static cpu limit of 100000 (100%) to hyperv.py instead of using the vcpu value of 1 --- nova/virt/hyperv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py index 30dc1c79b..190c1a880 100644 --- a/nova/virt/hyperv.py +++ b/nova/virt/hyperv.py @@ -191,7 +191,7 @@ class HyperVConnection(object): vcpus = long(instance['vcpus']) procsetting.VirtualQuantity = vcpus procsetting.Reservation = vcpus - procsetting.Limit = vcpus + procsetting.Limit = 100000 # static assignment to 100% since no limit/weight variable exists now. (job, ret_val) = vs_man_svc.ModifyVirtualSystemResources( vm.path_(), [procsetting.GetText_(1)]) -- cgit From 0fd1fa81e86c708020e8f3940da38cfc768557fb Mon Sep 17 00:00:00 2001 From: Jordan Rinke Date: Tue, 25 Jan 2011 09:18:55 -0800 Subject: Fixed spacing issue for pep8 --- nova/virt/hyperv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py index 190c1a880..4fed299d4 100644 --- a/nova/virt/hyperv.py +++ b/nova/virt/hyperv.py @@ -191,7 +191,7 @@ class HyperVConnection(object): vcpus = long(instance['vcpus']) procsetting.VirtualQuantity = vcpus procsetting.Reservation = vcpus - procsetting.Limit = 100000 # static assignment to 100% since no limit/weight variable exists now. + procsetting.Limit = 100000 # static assignment to 100% since no limit/weight variable exists now. (job, ret_val) = vs_man_svc.ModifyVirtualSystemResources( vm.path_(), [procsetting.GetText_(1)]) -- cgit From 0fb22b90295c0137dbe4535643ac741d249356f7 Mon Sep 17 00:00:00 2001 From: Jordan Rinke Date: Tue, 25 Jan 2011 09:21:31 -0800 Subject: Properly fixed spacing issue for pep8 --- nova/virt/hyperv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py index 4fed299d4..0fc7578d3 100644 --- a/nova/virt/hyperv.py +++ b/nova/virt/hyperv.py @@ -191,7 +191,7 @@ class HyperVConnection(object): vcpus = long(instance['vcpus']) procsetting.VirtualQuantity = vcpus procsetting.Reservation = vcpus - procsetting.Limit = 100000 # static assignment to 100% since no limit/weight variable exists now. + procsetting.Limit = 100000 #static assignment to 100% since no limit/weight variable exists now. (job, ret_val) = vs_man_svc.ModifyVirtualSystemResources( vm.path_(), [procsetting.GetText_(1)]) -- cgit From b1d2fc75d57080b3e0867f93aae71d0613d72d3c Mon Sep 17 00:00:00 2001 From: John Dewey Date: Tue, 25 Jan 2011 12:31:36 -0800 Subject: No longer hard coding to "/tmp/nova/images/". Using tempdir so tests run by different people on the same development machine pass. --- nova/image/local.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'nova') diff --git a/nova/image/local.py b/nova/image/local.py index b44593221..908d72d1d 100644 --- a/nova/image/local.py +++ b/nova/image/local.py @@ -18,6 +18,7 @@ import cPickle as pickle import os.path import random +import tempfile from nova import exception from nova.image import service @@ -30,11 +31,7 @@ class LocalImageService(service.BaseImageService): It assumes that image_ids are integers.""" def __init__(self): - self._path = "/tmp/nova/images" - try: - os.makedirs(self._path) - except OSError: # Exists - pass + self._path = tempfile.mkdtemp() def _path_to(self, image_id): return os.path.join(self._path, str(image_id)) -- cgit From 5ef600a9b8ad8401bf4d1f4b4f4c771b88a2acc0 Mon Sep 17 00:00:00 2001 From: John Dewey Date: Tue, 25 Jan 2011 17:22:16 -0800 Subject: Removal of image tempdir in test tearDown. Also, reformatted a couple method comments to match the file's style. --- nova/image/local.py | 12 ++++++++++-- nova/tests/api/openstack/test_images.py | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'nova') diff --git a/nova/image/local.py b/nova/image/local.py index 908d72d1d..c4b7b9ad5 100644 --- a/nova/image/local.py +++ b/nova/image/local.py @@ -62,7 +62,9 @@ class LocalImageService(service.BaseImageService): return id def update(self, context, image_id, data): - """Replace the contents of the given image with the new data.""" + """ + Replace the contents of the given image with the new data. + """ try: pickle.dump(data, open(self._path_to(image_id), 'w')) except IOError: @@ -79,7 +81,13 @@ class LocalImageService(service.BaseImageService): def delete_all(self): """ - Clears out all images in local directory + Clears out all images in local directory. """ for id in self._ids(): os.unlink(self._path_to(id)) + + def delete_imagedir(self): + """ + Deletes the local directory. Raises OSError if directory is not empty. + """ + os.rmdir(self._path) diff --git a/nova/tests/api/openstack/test_images.py b/nova/tests/api/openstack/test_images.py index 5d9ddefbe..8ab4d7569 100644 --- a/nova/tests/api/openstack/test_images.py +++ b/nova/tests/api/openstack/test_images.py @@ -143,6 +143,7 @@ class LocalImageServiceTest(unittest.TestCase, def tearDown(self): self.service.delete_all() + self.service.delete_imagedir() self.stubs.UnsetAll() -- cgit From 45ad2dcaf97a373a6b62b78b115ae3c8eb4c47a1 Mon Sep 17 00:00:00 2001 From: John Dewey Date: Tue, 25 Jan 2011 18:09:02 -0800 Subject: Fixing documentation strings. Second attempt at pep8. Many of the files under nova/image/*.py do not appear to follow the same documentation string rules. --- nova/image/local.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'nova') diff --git a/nova/image/local.py b/nova/image/local.py index c4b7b9ad5..177e81a30 100644 --- a/nova/image/local.py +++ b/nova/image/local.py @@ -27,8 +27,8 @@ from nova.image import service class LocalImageService(service.BaseImageService): """Image service storing images to local disk. - - It assumes that image_ids are integers.""" + It assumes that image_ids are integers. + """ def __init__(self): self._path = tempfile.mkdtemp() @@ -53,41 +53,37 @@ class LocalImageService(service.BaseImageService): raise exception.NotFound def create(self, context, data): - """ - Store the image data and return the new image id. - """ + """Store the image data and return the new image id.""" id = random.randint(0, 2 ** 31 - 1) data['id'] = id self.update(context, id, data) return id def update(self, context, image_id, data): - """ - Replace the contents of the given image with the new data. - """ + """Replace the contents of the given image with the new data.""" try: pickle.dump(data, open(self._path_to(image_id), 'w')) except IOError: raise exception.NotFound def delete(self, context, image_id): + """Delete the given image. + Raises OSError if the image does not exist. """ - Delete the given image. Raises OSError if the image does not exist. - """ + try: os.unlink(self._path_to(image_id)) except IOError: raise exception.NotFound def delete_all(self): - """ - Clears out all images in local directory. - """ + """Clears out all images in local directory.""" for id in self._ids(): os.unlink(self._path_to(id)) def delete_imagedir(self): + """Deletes the local directory. + Raises OSError if directory is not empty. """ - Deletes the local directory. Raises OSError if directory is not empty. - """ + os.rmdir(self._path) -- cgit From 6f0bebe2ee63f986376295a03f7c0fde16fa90b6 Mon Sep 17 00:00:00 2001 From: John Dewey Date: Tue, 25 Jan 2011 18:16:25 -0800 Subject: Prefixed ending multi-line docstring with a newline. --- nova/image/local.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'nova') diff --git a/nova/image/local.py b/nova/image/local.py index 177e81a30..f78b9aa89 100644 --- a/nova/image/local.py +++ b/nova/image/local.py @@ -28,6 +28,7 @@ class LocalImageService(service.BaseImageService): """Image service storing images to local disk. It assumes that image_ids are integers. + """ def __init__(self): @@ -69,8 +70,8 @@ class LocalImageService(service.BaseImageService): def delete(self, context, image_id): """Delete the given image. Raises OSError if the image does not exist. - """ + """ try: os.unlink(self._path_to(image_id)) except IOError: @@ -84,6 +85,6 @@ class LocalImageService(service.BaseImageService): def delete_imagedir(self): """Deletes the local directory. Raises OSError if directory is not empty. - """ + """ os.rmdir(self._path) -- cgit From f43e1182a77b68ebb3401f3b7316de4e242eb746 Mon Sep 17 00:00:00 2001 From: Soren Hansen Date: Wed, 26 Jan 2011 23:44:21 +0100 Subject: Make xml namespace match the API version requested. --- nova/api/ec2/__init__.py | 3 ++- nova/api/ec2/apirequest.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'nova') diff --git a/nova/api/ec2/__init__.py b/nova/api/ec2/__init__.py index fc9a37908..be9751256 100644 --- a/nova/api/ec2/__init__.py +++ b/nova/api/ec2/__init__.py @@ -213,7 +213,8 @@ class Requestify(wsgi.Middleware): LOG.debug(_('arg: %(key)s\t\tval: %(value)s') % locals()) # Success! - api_request = apirequest.APIRequest(self.controller, action, args) + api_request = apirequest.APIRequest(self.controller, action, + req.params['Version'], args) req.environ['ec2.request'] = api_request req.environ['ec2.action_args'] = args return self.application diff --git a/nova/api/ec2/apirequest.py b/nova/api/ec2/apirequest.py index d8a2b5f53..7e72d67fb 100644 --- a/nova/api/ec2/apirequest.py +++ b/nova/api/ec2/apirequest.py @@ -83,9 +83,10 @@ def _try_convert(value): class APIRequest(object): - def __init__(self, controller, action, args): + def __init__(self, controller, action, version, args): self.controller = controller self.action = action + self.version = version self.args = args def invoke(self, context): @@ -132,7 +133,7 @@ class APIRequest(object): response_el = xml.createElement(self.action + 'Response') response_el.setAttribute('xmlns', - 'http://ec2.amazonaws.com/doc/2009-11-30/') + 'http://ec2.amazonaws.com/doc/%s/' % self.version) request_id_el = xml.createElement('requestId') request_id_el.appendChild(xml.createTextNode(request_id)) response_el.appendChild(request_id_el) -- cgit From fb46c42ee4a0936c6e29864b1cb49a49257d0fb4 Mon Sep 17 00:00:00 2001 From: Soren Hansen Date: Thu, 27 Jan 2011 15:45:24 +0100 Subject: Add unit test for xmlns version matching request version. --- nova/tests/test_api.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) (limited to 'nova') diff --git a/nova/tests/test_api.py b/nova/tests/test_api.py index 66a16b0cb..2569e262b 100644 --- a/nova/tests/test_api.py +++ b/nova/tests/test_api.py @@ -36,6 +36,7 @@ from nova.auth import manager class FakeHttplibSocket(object): """a fake socket implementation for httplib.HTTPResponse, trivial""" def __init__(self, response_string): + self.response_string = response_string self._buffer = StringIO.StringIO(response_string) def makefile(self, _mode, _other): @@ -66,13 +67,16 @@ class FakeHttplibConnection(object): # For some reason, the response doesn't have "HTTP/1.0 " prepended; I # guess that's a function the web server usually provides. resp = "HTTP/1.0 %s" % resp - sock = FakeHttplibSocket(resp) - self.http_response = httplib.HTTPResponse(sock) + self.sock = FakeHttplibSocket(resp) + self.http_response = httplib.HTTPResponse(self.sock) self.http_response.begin() def getresponse(self): return self.http_response + def getresponsebody(self): + return self.sock.response_string + def close(self): """Required for compatibility with boto/tornado""" pass @@ -104,7 +108,7 @@ class ApiEc2TestCase(test.TestCase): self.app = ec2.Authenticate(ec2.Requestify(ec2.Executor(), 'nova.api.ec2.cloud.CloudController')) - def expect_http(self, host=None, is_secure=False): + def expect_http(self, host=None, is_secure=False, api_version=None): """Returns a new EC2 connection""" self.ec2 = boto.connect_ec2( aws_access_key_id='fake', @@ -113,13 +117,31 @@ class ApiEc2TestCase(test.TestCase): region=regioninfo.RegionInfo(None, 'test', self.host), port=8773, path='/services/Cloud') + if api_version: + self.ec2.APIVersion = api_version self.mox.StubOutWithMock(self.ec2, 'new_http_connection') - http = FakeHttplibConnection( + self.http = FakeHttplibConnection( self.app, '%s:8773' % (self.host), False) # pylint: disable-msg=E1103 - self.ec2.new_http_connection(host, is_secure).AndReturn(http) - return http + self.ec2.new_http_connection(host, is_secure).AndReturn(self.http) + return self.http + + def test_xmlns_version_matches_request_version(self): + self.expect_http(api_version='2010-10-30') + self.mox.ReplayAll() + + user = self.manager.create_user('fake', 'fake', 'fake') + project = self.manager.create_project('fake', 'fake', 'fake') + + # Any request should be fine + self.ec2.get_all_instances() + self.assertTrue(self.ec2.APIVersion in self.http.getresponsebody(), + 'The version in the xmlns of the response does ' + 'not match the API version given in the request.') + + self.manager.delete_project(project) + self.manager.delete_user(user) def test_describe_instances(self): """Test that, after creating a user and a project, the describe -- cgit From ae0f6c611d0d195da243e4a8f7dfe5fcb79978ac Mon Sep 17 00:00:00 2001 From: Thierry Carrez Date: Thu, 27 Jan 2011 16:39:51 +0100 Subject: Naive, low-regression-risk fix enabling Glance to work with libvirt/hyperv --- nova/virt/images.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'nova') diff --git a/nova/virt/images.py b/nova/virt/images.py index 9c987e14d..7a6fef330 100644 --- a/nova/virt/images.py +++ b/nova/virt/images.py @@ -111,5 +111,8 @@ def _image_path(path): def image_url(image): + if FLAGS.image_service == "nova.image.glance.GlanceImageService": + return "http://%s:%s/images/%s" % (FLAGS.glance_host, + FLAGS.glance_port, image) return "http://%s:%s/_images/%s/image" % (FLAGS.s3_host, FLAGS.s3_port, image) -- cgit From 3b59176df0ea63715e2f8af73258af87bb06ee97 Mon Sep 17 00:00:00 2001 From: Jordan Rinke Date: Thu, 27 Jan 2011 08:48:22 -0800 Subject: Shortened comment for 80char limt. --- nova/virt/hyperv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py index 0fc7578d3..d2383d72c 100644 --- a/nova/virt/hyperv.py +++ b/nova/virt/hyperv.py @@ -191,7 +191,7 @@ class HyperVConnection(object): vcpus = long(instance['vcpus']) procsetting.VirtualQuantity = vcpus procsetting.Reservation = vcpus - procsetting.Limit = 100000 #static assignment to 100% since no limit/weight variable exists now. + procsetting.Limit = 100000 #static assignment to 100% (job, ret_val) = vs_man_svc.ModifyVirtualSystemResources( vm.path_(), [procsetting.GetText_(1)]) -- cgit From 498171d2212f51185e9479da1222f0753acab779 Mon Sep 17 00:00:00 2001 From: Jordan Rinke Date: Thu, 27 Jan 2011 09:43:25 -0800 Subject: Fixed spacing... AGAIN --- nova/virt/hyperv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/virt/hyperv.py b/nova/virt/hyperv.py index d2383d72c..a745c619e 100644 --- a/nova/virt/hyperv.py +++ b/nova/virt/hyperv.py @@ -191,7 +191,7 @@ class HyperVConnection(object): vcpus = long(instance['vcpus']) procsetting.VirtualQuantity = vcpus procsetting.Reservation = vcpus - procsetting.Limit = 100000 #static assignment to 100% + procsetting.Limit = 100000 # static assignment to 100% (job, ret_val) = vs_man_svc.ModifyVirtualSystemResources( vm.path_(), [procsetting.GetText_(1)]) -- cgit