summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-07-12 16:02:39 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-07-12 16:02:39 -0400
commit07baabb67d9491da61fa5bfe9adc52f7ff744e22 (patch)
tree596e6e19b56b505af42b8b16976b046f6605a1ba
parent54be28647ac3ad401006bca3069b1dfc1a65d093 (diff)
downloadnova-07baabb67d9491da61fa5bfe9adc52f7ff744e22.tar.gz
nova-07baabb67d9491da61fa5bfe9adc52f7ff744e22.tar.xz
nova-07baabb67d9491da61fa5bfe9adc52f7ff744e22.zip
cleanup
-rw-r--r--nova/api/openstack/create_instance_helper.py24
-rw-r--r--nova/api/openstack/servers.py41
-rw-r--r--nova/tests/api/openstack/test_servers.py37
3 files changed, 37 insertions, 65 deletions
diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py
index eea973a56..e46bc9d98 100644
--- a/nova/api/openstack/create_instance_helper.py
+++ b/nova/api/openstack/create_instance_helper.py
@@ -320,12 +320,10 @@ class ServerXMLDeserializer(wsgi.XMLDeserializer):
image = {}
image_id = image_node.getAttribute('id')
- if image_id:
+ if image_id is not None:
image['id'] = image_id
- image_links = self._extract_links_from_node(image_node)
- if len(image_links) > 0:
- image['links'] = image_links
+ image['links'] = self._extract_links_from_node(image_node)
return image
@@ -340,9 +338,7 @@ class ServerXMLDeserializer(wsgi.XMLDeserializer):
if flavor_id:
flavor['id'] = flavor_id
- flavor_links = self._extract_links_from_node(flavor_node)
- if len(flavor_links) > 0:
- flavor['links'] = flavor_links
+ flavor['links'] = self._extract_links_from_node(flavor_node)
return flavor
@@ -351,14 +347,12 @@ class ServerXMLDeserializer(wsgi.XMLDeserializer):
links = []
for link_node in self._find_children_named(parent_node, 'atom:link'):
- link = {}
- link_rel = link_node.getAttribute('rel')
- if link_rel is not None:
- link['rel'] = link_rel
- link_href = link_node.getAttribute('href')
- if link_href is not None:
- link['href'] = link_href
- links.append(link)
+ link = {
+ 'rel': link_node.getAttribute('rel'),
+ 'href': link_node.getAttribute('href'),
+ }
+ if link['rel'] is not None and link['href'] is not None:
+ links.append(link)
return links
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index f239044ff..1e8749f56 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -491,10 +491,21 @@ class ControllerV11(Controller):
except exception.NotFound:
return faults.Fault(exc.HTTPNotFound())
+ def _href_from_bookmark_links(self, links)
+ for link in links:
+ try:
+ if link.get('rel') == 'bookmark':
+ href = link.get('href')
+ if href is not None:
+ return href
+ except AttributeError:
+ msg = _("Malformed link entity")
+ raise exc.HTTPBadRequest(explanation=msg)
+
def _image_ref_from_req_data(self, data):
try:
image = data['server']['image']
- except (AttributeError, KeyError):
+ except (TypeError, KeyError):
msg = _("Missing image entity")
raise exc.HTTPBadRequest(explanation=msg)
@@ -504,29 +515,21 @@ class ControllerV11(Controller):
msg = _("Malformed image entity")
raise exc.HTTPBadRequest(explanation=msg)
- image_ref = None
- for link in links:
- try:
- if link.get('rel') == 'bookmark':
- image_ref = link.get('href')
- break
- except AttributeError:
- msg = _("Malformed image link")
- raise exc.HTTPBadRequest(explanation=msg)
+ image_ref = self._href_from_bookmark_links(links)
if image_ref is None:
try:
- image_ref = image['id']
+ return image['id']
except KeyError:
msg = _("Missing id attribute on image entity")
raise exc.HTTPBadRequest(explanation=msg)
-
- return image_ref
+ else:
+ return image_ref
def _flavor_id_from_req_data(self, data):
try:
flavor = data['server']['flavor']
- except (AttributeError, KeyError):
+ except (TypeError, KeyError):
msg = _("Missing flavor entity")
raise exc.HTTPBadRequest(explanation=msg)
@@ -536,15 +539,7 @@ class ControllerV11(Controller):
msg = _("Malformed flavor entity")
raise exc.HTTPBadRequest(explanation=msg)
- flavor_ref = None
- for link in links:
- try:
- if link.get('rel') == 'bookmark':
- flavor_ref = link.get('href')
- break
- except AttributeError:
- msg = _("Malformed flavor link")
- raise exc.HTTPBadRequest(explanation=msg)
+ flavor_ref = self._href_from_bookmark_links(links)
if flavor_ref is None:
try:
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index cb7e03934..83b43b8ac 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -612,7 +612,7 @@ class ServersTest(test.TestCase):
"_get_kernel_ramdisk_from_image", kernel_ramdisk_mapping)
self.stubs.Set(nova.compute.api.API, "_find_host", find_host)
- def test_create_instance(self):
+ def _test_create_instance_helper(self):
self._setup_for_create_instance()
body = dict(server=dict(
@@ -635,6 +635,9 @@ class ServersTest(test.TestCase):
self.assertEqual(3, server['imageId'])
self.assertEqual(FAKE_UUID, server['uuid'])
+ def test_create_instance(self):
+ self._test_create_instance_helper()
+
def test_create_instance_has_uuid(self):
"""Tests at the db-layer instead of API layer since that's where the
UUID is generated
@@ -689,27 +692,7 @@ class ServersTest(test.TestCase):
def test_create_instance_no_key_pair(self):
fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False)
- self._setup_for_create_instance()
-
- body = dict(server=dict(
- name='server_test', imageId=3, flavorId=2,
- metadata={'hello': 'world', 'open': 'stack'},
- personality={}))
- req = webob.Request.blank('/v1.0/servers')
- req.method = 'POST'
- req.body = json.dumps(body)
- req.headers["content-type"] = "application/json"
-
- res = req.get_response(fakes.wsgi_app())
-
- server = json.loads(res.body)['server']
- self.assertEqual(16, len(server['adminPass']))
- self.assertEqual('server_test', server['name'])
- self.assertEqual(1, server['id'])
- self.assertEqual(2, server['flavorId'])
- self.assertEqual(3, server['imageId'])
- self.assertEqual(FAKE_UUID, server['uuid'])
- self.assertEqual(res.status_int, 200)
+ self._test_create_instance_helper()
def test_create_instance_no_name(self):
self._setup_for_create_instance()
@@ -782,20 +765,20 @@ class ServersTest(test.TestCase):
def test_create_instance_v1_1(self):
self._setup_for_create_instance()
- image_href = 'http://localhost/v1.1/images/3'
- flavor_href = 'http://localhost/v1.1/flavors/2'
+ image_href = 'http://localhost/v1.1/images/2'
+ flavor_href = 'http://localhost/v1.1/flavors/3'
body = {
'server': {
'name': 'server_test',
'image': {
- 'id': 3,
+ 'id': 2,
'links': [
{'rel': 'bookmark', 'href': image_href},
],
},
'flavor': {
- 'id': 2,
+ 'id': 3,
'links': [
{'rel': 'bookmark', 'href': flavor_href},
],
@@ -1793,7 +1776,7 @@ class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase):
def test_minimal_request(self):
serial_request = """
<server xmlns="http://docs.rackspacecloud.com/servers/api/v1.0"
- name="new-server-test" imageId="1" flavorId="1" />"""
+ name="new-server-test" imageId="1" flavorId="1"/>"""
request = self.deserializer.deserialize(serial_request, 'create')
expected = {"server": {
"name": "new-server-test",