diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-09-10 16:44:44 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-09-10 16:44:44 +0000 |
commit | b05eef9201ee78ee72d5a0d5bdb0579cd4a5cf3e (patch) | |
tree | 0d6786a169a4f618ca7dbd0262fd9c9337ad85f7 /nova | |
parent | 1533bb2270a1cf04fd9b87af13dc143cf220f263 (diff) | |
parent | 350d6f533753c82099bc33156ece095bc5670372 (diff) | |
download | nova-b05eef9201ee78ee72d5a0d5bdb0579cd4a5cf3e.tar.gz |
Merge "Makes v3 API keypairs extension core"
Diffstat (limited to 'nova')
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> |