summaryrefslogtreecommitdiff
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-09-10 16:44:44 +0000
committerGerrit Code Review <review@openstack.org>2013-09-10 16:44:44 +0000
commitb05eef9201ee78ee72d5a0d5bdb0579cd4a5cf3e (patch)
tree0d6786a169a4f618ca7dbd0262fd9c9337ad85f7 /nova
parent1533bb2270a1cf04fd9b87af13dc143cf220f263 (diff)
parent350d6f533753c82099bc33156ece095bc5670372 (diff)
downloadnova-b05eef9201ee78ee72d5a0d5bdb0579cd4a5cf3e.tar.gz
Merge "Makes v3 API keypairs extension core"
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/__init__.py3
-rw-r--r--nova/api/openstack/compute/plugins/v3/keypairs.py6
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_keypairs.py66
-rw-r--r--nova/tests/fake_policy.py10
-rw-r--r--nova/tests/integrated/v3/api_samples/servers/server-get-resp.json.tpl1
-rw-r--r--nova/tests/integrated/v3/api_samples/servers/server-get-resp.xml.tpl2
-rw-r--r--nova/tests/integrated/v3/api_samples/servers/servers-details-resp.json.tpl1
-rw-r--r--nova/tests/integrated/v3/api_samples/servers/servers-details-resp.xml.tpl2
8 files changed, 47 insertions, 44 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index a12867aaf8..cba4ca5c82 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -61,7 +61,8 @@ CONF.register_opts(api_opts, api_opts_group)
# the core API and so must be present
# TODO(cyeoh): Expand this list as the core APIs are ported to V3
API_V3_CORE_EXTENSIONS = set(['consoles', 'extensions', 'flavors', 'ips',
- 'limits', 'servers', 'server-metadata'])
+ 'limits', 'servers', 'server-metadata',
+ 'keypairs'])
class FaultWrapper(base_wsgi.Middleware):
diff --git a/nova/api/openstack/compute/plugins/v3/keypairs.py b/nova/api/openstack/compute/plugins/v3/keypairs.py
index 5d824e4587..4fef7bd19b 100644
--- a/nova/api/openstack/compute/plugins/v3/keypairs.py
+++ b/nova/api/openstack/compute/plugins/v3/keypairs.py
@@ -28,7 +28,7 @@ from nova import exception
from nova.openstack.common.gettextutils import _
-ALIAS = 'os-keypairs'
+ALIAS = 'keypairs'
authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS)
soft_authorize = extensions.soft_extension_authorizer('compute', 'v3:' + ALIAS)
@@ -207,12 +207,12 @@ class Keypairs(extensions.V3APIExtensionBase):
name = "Keypairs"
alias = ALIAS
- namespace = "http://docs.openstack.org/compute/ext/keypairs/api/v3"
+ namespace = "http://docs.openstack.org/compute/core/keypairs/api/v3"
version = 1
def get_resources(self):
resources = [
- extensions.ResourceExtension('os-keypairs',
+ extensions.ResourceExtension('keypairs',
KeypairController())]
return resources
diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_keypairs.py b/nova/tests/api/openstack/compute/plugins/v3/test_keypairs.py
index 96299a8a28..a73bde3e47 100644
--- a/nova/tests/api/openstack/compute/plugins/v3/test_keypairs.py
+++ b/nova/tests/api/openstack/compute/plugins/v3/test_keypairs.py
@@ -79,10 +79,10 @@ class KeypairsTest(test.TestCase):
osapi_compute_extension=[
'nova.api.openstack.compute.contrib.select_extensions'],
osapi_compute_ext_list=['Keypairs'])
- self.app = fakes.wsgi_app_v3(init_only=('os-keypairs', 'servers'))
+ self.app = fakes.wsgi_app_v3(init_only=('keypairs', 'servers'))
def test_keypair_list(self):
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
res = req.get_response(self.app)
self.assertEqual(res.status_int, 200)
res_dict = jsonutils.loads(res.body)
@@ -91,7 +91,7 @@ class KeypairsTest(test.TestCase):
def test_keypair_create(self):
body = {'keypair': {'name': 'create_test'}}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -103,7 +103,7 @@ class KeypairsTest(test.TestCase):
def test_keypair_create_with_empty_name(self):
body = {'keypair': {'name': ''}}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -120,7 +120,7 @@ class KeypairsTest(test.TestCase):
'name': 'a' * 256
}
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -137,7 +137,7 @@ class KeypairsTest(test.TestCase):
'name': 'test/keypair'
}
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -165,7 +165,7 @@ class KeypairsTest(test.TestCase):
},
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -198,7 +198,7 @@ class KeypairsTest(test.TestCase):
},
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -222,7 +222,7 @@ class KeypairsTest(test.TestCase):
},
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -236,7 +236,7 @@ class KeypairsTest(test.TestCase):
def test_keypair_create_duplicate(self):
self.stubs.Set(db, "key_pair_create", db_key_pair_create_duplicate)
body = {'keypair': {'name': 'create_duplicate'}}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -255,7 +255,7 @@ class KeypairsTest(test.TestCase):
},
}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -266,14 +266,14 @@ class KeypairsTest(test.TestCase):
res_dict['badRequest']['message'])
def test_keypair_delete(self):
- req = webob.Request.blank('/v3/os-keypairs/FAKE')
+ req = webob.Request.blank('/v3/keypairs/FAKE')
req.method = 'DELETE'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(self.app)
self.assertEqual(res.status_int, 202)
def test_keypair_get_keypair_not_found(self):
- req = webob.Request.blank('/v3/os-keypairs/DOESNOTEXIST')
+ req = webob.Request.blank('/v3/keypairs/DOESNOTEXIST')
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
@@ -284,7 +284,7 @@ class KeypairsTest(test.TestCase):
self.stubs.Set(db, "key_pair_get",
db_key_pair_get_not_found)
- req = webob.Request.blank('/v3/os-keypairs/WHAT')
+ req = webob.Request.blank('/v3/keypairs/WHAT')
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
@@ -296,7 +296,7 @@ class KeypairsTest(test.TestCase):
self.stubs.Set(db, "key_pair_get", _db_key_pair_get)
- req = webob.Request.blank('/v3/os-keypairs/FAKE')
+ req = webob.Request.blank('/v3/keypairs/FAKE')
req.method = 'GET'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(self.app)
@@ -313,7 +313,7 @@ class KeypairsTest(test.TestCase):
self.stubs.Set(db, "key_pair_get", _db_key_pair_get)
- req = webob.Request.blank('/v3/os-keypairs/FAKE')
+ req = webob.Request.blank('/v3/keypairs/FAKE')
req.method = 'GET'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(self.app)
@@ -347,7 +347,7 @@ class KeypairsTest(test.TestCase):
def test_keypair_create_with_invalid_keypair_body(self):
body = {'alpha': {'name': 'create_test'}}
- req = webob.Request.blank('/v3/os-keypairs')
+ req = webob.Request.blank('/v3/keypairs')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -378,44 +378,44 @@ class KeypairPolicyTest(test.TestCase):
db_key_pair_destroy)
def test_keypair_list_fail_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:index':
+ rules = policy.Rules({'compute_extension:v3:keypairs:index':
policy.parse_rule('role:admin')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs')
+ req = fakes.HTTPRequest.blank('/v3/keypairs')
self.assertRaises(exception.NotAuthorized,
self.KeyPairController.index,
req)
def test_keypair_list_pass_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:index':
+ rules = policy.Rules({'compute_extension:v3:keypairs:index':
policy.parse_rule('')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs')
+ req = fakes.HTTPRequest.blank('/v3/keypairs')
res = self.KeyPairController.index(req)
self.assertTrue('keypairs' in res)
def test_keypair_show_fail_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:show':
+ rules = policy.Rules({'compute_extension:v3:keypairs:show':
policy.parse_rule('role:admin')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs/FAKE')
+ req = fakes.HTTPRequest.blank('/v3/keypairs/FAKE')
self.assertRaises(exception.NotAuthorized,
self.KeyPairController.show,
req, 'FAKE')
def test_keypair_show_pass_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:show':
+ rules = policy.Rules({'compute_extension:v3:keypairs:show':
policy.parse_rule('')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs/FAKE')
+ req = fakes.HTTPRequest.blank('/v3/keypairs/FAKE')
res = self.KeyPairController.show(req, 'FAKE')
self.assertTrue('keypair' in res)
def test_keypair_create_fail_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:create':
+ rules = policy.Rules({'compute_extension:v3:keypairs:create':
policy.parse_rule('role:admin')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs')
+ req = fakes.HTTPRequest.blank('/v3/keypairs')
req.method = 'POST'
self.assertRaises(exception.NotAuthorized,
self.KeyPairController.create,
@@ -423,29 +423,29 @@ class KeypairPolicyTest(test.TestCase):
def test_keypair_create_pass_policy(self):
body = {'keypair': {'name': 'create_test'}}
- rules = policy.Rules({'compute_extension:v3:os-keypairs:create':
+ rules = policy.Rules({'compute_extension:v3:keypairs:create':
policy.parse_rule('')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs')
+ req = fakes.HTTPRequest.blank('/v3/keypairs')
req.method = 'POST'
res = self.KeyPairController.create(req, body)
self.assertTrue('keypair' in res)
def test_keypair_delete_fail_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:delete':
+ rules = policy.Rules({'compute_extension:v3:keypairs:delete':
policy.parse_rule('role:admin')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs/FAKE')
+ req = fakes.HTTPRequest.blank('/v3/keypairs/FAKE')
req.method = 'DELETE'
self.assertRaises(exception.NotAuthorized,
self.KeyPairController.delete,
req, 'FAKE')
def test_keypair_delete_pass_policy(self):
- rules = policy.Rules({'compute_extension:v3:os-keypairs:delete':
+ rules = policy.Rules({'compute_extension:v3:keypairs:delete':
policy.parse_rule('')})
policy.set_rules(rules)
- req = fakes.HTTPRequest.blank('/v3/fake/os-keypairs/FAKE')
+ req = fakes.HTTPRequest.blank('/v3/keypairs/FAKE')
req.method = 'DELETE'
res = self.KeyPairController.delete(req, 'FAKE')
self.assertEqual(res.status_int, 202)
diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py
index 3d420c1491..63bc82dbe0 100644
--- a/nova/tests/fake_policy.py
+++ b/nova/tests/fake_policy.py
@@ -216,11 +216,11 @@ policy_data = """
"compute_extension:keypairs:create": "",
"compute_extension:keypairs:delete": "",
- "compute_extension:v3:os-keypairs": "",
- "compute_extension:v3:os-keypairs:index": "",
- "compute_extension:v3:os-keypairs:show": "",
- "compute_extension:v3:os-keypairs:create": "",
- "compute_extension:v3:os-keypairs:delete": "",
+ "compute_extension:v3:keypairs": "",
+ "compute_extension:v3:keypairs:index": "",
+ "compute_extension:v3:keypairs:show": "",
+ "compute_extension:v3:keypairs:create": "",
+ "compute_extension:v3:keypairs:delete": "",
"compute_extension:multinic": "",
"compute_extension:v3:os-multinic": "",
"compute_extension:networks": "",
diff --git a/nova/tests/integrated/v3/api_samples/servers/server-get-resp.json.tpl b/nova/tests/integrated/v3/api_samples/servers/server-get-resp.json.tpl
index 6e31aae6f6..afb281c5bd 100644
--- a/nova/tests/integrated/v3/api_samples/servers/server-get-resp.json.tpl
+++ b/nova/tests/integrated/v3/api_samples/servers/server-get-resp.json.tpl
@@ -33,6 +33,7 @@
}
]
},
+ "key_name": null,
"links": [
{
"href": "%(host)s/v3/servers/%(uuid)s",
diff --git a/nova/tests/integrated/v3/api_samples/servers/server-get-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/servers/server-get-resp.xml.tpl
index 5cfb01fa52..8286f6ceda 100644
--- a/nova/tests/integrated/v3/api_samples/servers/server-get-resp.xml.tpl
+++ b/nova/tests/integrated/v3/api_samples/servers/server-get-resp.xml.tpl
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
-<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" status="ACTIVE" updated="%(timestamp)s" user_id="fake" name="new-server-test" created="%(timestamp)s" tenant_id="openstack" access_ip_v4="" progress="0" host_id="%(hostid)s" id="%(id)s" access_ip_v6="">
+<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" status="ACTIVE" updated="%(timestamp)s" user_id="fake" name="new-server-test" created="%(timestamp)s" tenant_id="openstack" access_ip_v4="" progress="0" host_id="%(hostid)s" id="%(id)s" access_ip_v6="" key_name="None">
<image id="%(uuid)s">
<atom:link href="%(glance_host)s/images/%(uuid)s" rel="bookmark"/>
</image>
diff --git a/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.json.tpl b/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.json.tpl
index dce3ded800..cbbb57bc7d 100644
--- a/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.json.tpl
+++ b/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.json.tpl
@@ -34,6 +34,7 @@
}
]
},
+ "key_name": null,
"links": [
{
"href": "%(host)s/v3/servers/%(uuid)s",
diff --git a/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.xml.tpl
index d9e0234e78..f7b5006ba6 100644
--- a/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.xml.tpl
+++ b/nova/tests/integrated/v3/api_samples/servers/servers-details-resp.xml.tpl
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<servers xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1">
- <server status="ACTIVE" updated="%(timestamp)s" host_id="%(hostid)s" name="new-server-test" created="%(timestamp)s" user_id="fake" tenant_id="openstack" access_ip_v4="" access_ip_v6="" progress="0" id="%(id)s">
+ <server status="ACTIVE" updated="%(timestamp)s" host_id="%(hostid)s" name="new-server-test" created="%(timestamp)s" user_id="fake" tenant_id="openstack" access_ip_v4="" access_ip_v6="" key_name="None" progress="0" id="%(id)s">
<image id="%(uuid)s">
<atom:link href="%(glance_host)s/images/%(uuid)s" rel="bookmark"/>
</image>