Coverage for manila/api/v1/router.py: 100%
61 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
1# Copyright 2011 OpenStack LLC.
2# Copyright 2011 United States Government as represented by the
3# Administrator of the National Aeronautics and Space Administration.
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
18"""
19WSGI middleware for OpenStack Share API v1.
20"""
22from manila.api import extensions
23import manila.api.openstack
24from manila.api.v1 import share_metadata
25from manila.api.v1 import share_servers
26from manila.api.v1 import share_snapshots
27from manila.api.v1 import shares
28from manila.api.v2 import availability_zones
29from manila.api.v2 import limits
30from manila.api.v2 import quota_class_sets
31from manila.api.v2 import quota_sets
32from manila.api.v2 import scheduler_stats
33from manila.api.v2 import security_service
34from manila.api.v2 import services
35from manila.api.v2 import share_manage
36from manila.api.v2 import share_networks
37from manila.api.v2 import share_types
38from manila.api.v2 import share_types_extra_specs
39from manila.api.v2 import share_unmanage
40from manila.api import versions
43class APIRouter(manila.api.openstack.APIRouter):
44 """Route API requests.
46 Routes requests on the OpenStack API to the appropriate controller
47 and method.
48 """
49 ExtensionManager = extensions.ExtensionManager
51 def _setup_routes(self, mapper):
52 self.resources['versions'] = versions.create_resource()
53 mapper.connect("versions", "/",
54 controller=self.resources['versions'],
55 action='index')
57 mapper.redirect("", "/")
59 self.resources["availability_zones"] = (
60 availability_zones.create_resource_legacy())
61 mapper.resource("availability-zone",
62 "os-availability-zone",
63 controller=self.resources["availability_zones"])
65 self.resources["services"] = services.create_resource_legacy()
66 mapper.resource("service",
67 "os-services",
68 controller=self.resources["services"])
70 self.resources["quota_sets"] = quota_sets.create_resource_legacy()
71 mapper.resource("quota-set",
72 "os-quota-sets",
73 controller=self.resources["quota_sets"],
74 member={'defaults': 'GET'})
76 self.resources["quota_class_sets"] = (
77 quota_class_sets.create_resource_legacy())
78 mapper.resource("quota-class-set",
79 "os-quota-class-sets",
80 controller=self.resources["quota_class_sets"])
82 self.resources["share_manage"] = share_manage.create_resource()
83 mapper.resource("share_manage",
84 "os-share-manage",
85 controller=self.resources["share_manage"])
87 self.resources["share_unmanage"] = share_unmanage.create_resource()
88 mapper.resource("share_unmanage",
89 "os-share-unmanage",
90 controller=self.resources["share_unmanage"],
91 member={'unmanage': 'POST'})
93 self.resources['shares'] = shares.create_resource()
94 mapper.resource("share", "shares",
95 controller=self.resources['shares'],
96 collection={'detail': 'GET'},
97 member={'action': 'POST'})
99 self.resources['snapshots'] = share_snapshots.create_resource()
100 mapper.resource("snapshot", "snapshots",
101 controller=self.resources['snapshots'],
102 collection={'detail': 'GET'},
103 member={'action': 'POST'})
105 self.resources['share_metadata'] = share_metadata.create_resource()
106 share_metadata_controller = self.resources['share_metadata']
108 mapper.resource("share_metadata", "metadata",
109 controller=share_metadata_controller,
110 parent_resource=dict(member_name='share',
111 collection_name='shares'))
113 mapper.connect("metadata",
114 "/{project_id}/shares/{share_id}/metadata",
115 controller=share_metadata_controller,
116 action='update_all',
117 conditions={"method": ['PUT']})
119 self.resources['limits'] = limits.create_resource()
120 mapper.resource("limit", "limits",
121 controller=self.resources['limits'])
123 self.resources["security_services"] = (
124 security_service.create_resource())
125 mapper.resource("security-service", "security-services",
126 controller=self.resources['security_services'],
127 collection={'detail': 'GET'})
129 self.resources['share_networks'] = share_networks.create_resource()
130 mapper.resource(share_networks.RESOURCE_NAME,
131 'share-networks',
132 controller=self.resources['share_networks'],
133 collection={'detail': 'GET'},
134 member={'action': 'POST'})
136 self.resources['share_servers'] = share_servers.create_resource()
137 mapper.resource('share_server',
138 'share-servers',
139 controller=self.resources['share_servers'])
140 mapper.connect('details',
141 '/{project_id}/share-servers/{id}/details',
142 controller=self.resources['share_servers'],
143 action='details',
144 conditions={"method": ['GET']})
146 self.resources['types'] = share_types.create_resource()
147 mapper.resource("type", "types",
148 controller=self.resources['types'],
149 collection={'detail': 'GET', 'default': 'GET'},
150 member={'action': 'POST',
151 'os-share-type-access': 'GET'})
153 self.resources['extra_specs'] = (
154 share_types_extra_specs.create_resource())
155 mapper.resource('extra_spec', 'extra_specs',
156 controller=self.resources['extra_specs'],
157 parent_resource=dict(member_name='type',
158 collection_name='types'))
160 self.resources['scheduler_stats'] = scheduler_stats.create_resource()
161 mapper.connect('pools', '/{project_id}/scheduler-stats/pools',
162 controller=self.resources['scheduler_stats'],
163 action='pools_index',
164 conditions={'method': ['GET']})
165 mapper.connect('pools', '/{project_id}/scheduler-stats/pools/detail',
166 controller=self.resources['scheduler_stats'],
167 action='pools_detail',
168 conditions={'method': ['GET']})