~ttx/nova/mp820962

« back to all changes in this revision

Viewing changes to nova/api/openstack/__init__.py

  • Committer: Tarmac
  • Author(s): Vishvananda Ishaya, Chris Behrens, Brian Waldon, Nikolay Sokolov, Alex Meade, Soren Hansen, matt.dietz at rackspace, throughnothing at gmail, John Tran, Josh Kearney, Tushar Patil, Jake Dahn, Ed Leafe, Isaku Yamahata, Ryu Ishimoto, Thierry Carrez, vladimir.p, Jason Koelker, Donal Lafferty, Christopher MacGown, kevin.mitchell at rackspace, Kei Masumoto, Matthew Hooker, Sandy Walsh, Kei masumoto, Johannes Erdfelt, Dave Walker (Daviey), Zed Shaw, Naveed Massjouni, Brian Lamar, Launchpad Translations on behalf of nova-core, Anthony Young, matt.dietz at rackspace, Jake Dahn, Justin Shepherd, Gabe Westmaas, Rick Harris, Dan Prince, Ilya Alekseyev, Jake Dahn, Monsyne Dragon, Dan Wendlandt, Kevin Bringard, Troy Toman, Jesse Andrews, Yoshiaki Tamura, Trey Morris, Ken Pepple, Adam Gandelman, Rick Harris, Mandell Degerness, termie, Lorin Hochstein, Joseph Suh, Jason Kölker, Salvatore Orlando, Cerberus, Devendra Modium, Kevin L. Mitchell, Jimmy Bergman, Mohammed Naser, Lvov Maxim, danwent, asomya at cisco, Mike Scherbakov, Arvind Somy, Yuriy Taraday, Scott Moser, Anne Gentle, Chuck Short, Adam Johnson, Mark Washenberger, Stephanie Reese, Alexander Sakhnov, Nickolay Sokolov, Ilya Alekseyev, William Wolf, Todd Willey, Eldar Nugaev, Jason Cannavale, Ewan Mellor, Eldar Nugaev, Kirill Shileev
  • Date: 2011-08-23 13:49:00 UTC
  • mfrom: (1143.1.1 milestone-proposed)
  • Revision ID: tarmac-20110823134900-rr76tc1uljuxwcfx
Merge diablo-4 development from trunk (rev1479)

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
from nova.api.openstack import server_metadata
41
41
from nova.api.openstack import shared_ip_groups
42
42
from nova.api.openstack import users
 
43
from nova.api.openstack import versions
43
44
from nova.api.openstack import wsgi
44
45
from nova.api.openstack import zones
45
46
 
49
50
flags.DEFINE_bool('allow_admin_api',
50
51
    False,
51
52
    'When True, this API service will accept admin operations.')
 
53
flags.DEFINE_bool('allow_instance_snapshots',
 
54
    True,
 
55
    'When True, this API service will permit instance snapshot operations.')
52
56
 
53
57
 
54
58
class FaultWrapper(base_wsgi.Middleware):
64
68
            return faults.Fault(exc)
65
69
 
66
70
 
 
71
class ProjectMapper(routes.Mapper):
 
72
 
 
73
    def resource(self, member_name, collection_name, **kwargs):
 
74
        if not ('parent_resource' in kwargs):
 
75
            kwargs['path_prefix'] = '{project_id}/'
 
76
        else:
 
77
            parent_resource = kwargs['parent_resource']
 
78
            p_collection = parent_resource['collection_name']
 
79
            p_member = parent_resource['member_name']
 
80
            kwargs['path_prefix'] = '{project_id}/%s/:%s_id' % (p_collection,
 
81
                                                               p_member)
 
82
        routes.Mapper.resource(self, member_name,
 
83
                                     collection_name,
 
84
                                     **kwargs)
 
85
 
 
86
 
67
87
class APIRouter(base_wsgi.Router):
68
88
    """
69
89
    Routes requests on the OpenStack API to the appropriate controller
77
97
 
78
98
    def __init__(self, ext_mgr=None):
79
99
        self.server_members = {}
80
 
        mapper = routes.Mapper()
 
100
        mapper = self._mapper()
81
101
        self._setup_routes(mapper)
82
102
        super(APIRouter, self).__init__(mapper)
83
103
 
84
 
    def _setup_routes(self, mapper, version):
 
104
    def _mapper(self):
 
105
        return routes.Mapper()
 
106
 
 
107
    def _setup_routes(self, mapper):
 
108
        raise NotImplementedError(_("You must implement _setup_routes."))
 
109
 
 
110
    def _setup_base_routes(self, mapper, version):
85
111
        """Routes common to all versions."""
86
112
 
87
113
        server_members = self.server_members
96
122
            server_members['suspend'] = 'POST'
97
123
            server_members['resume'] = 'POST'
98
124
            server_members['rescue'] = 'POST'
 
125
            server_members['migrate'] = 'POST'
99
126
            server_members['unrescue'] = 'POST'
100
127
            server_members['reset_network'] = 'POST'
101
128
            server_members['inject_network_info'] = 'POST'
115
142
                                    'select': 'POST',
116
143
                                    'boot': 'POST'})
117
144
 
 
145
        mapper.connect("versions", "/",
 
146
                    controller=versions.create_resource(version),
 
147
                    action='show')
 
148
 
118
149
        mapper.resource("console", "consoles",
119
150
                    controller=consoles.create_resource(),
120
151
                    parent_resource=dict(member_name='server',
147
178
    """Define routes specific to OpenStack API V1.0."""
148
179
 
149
180
    def _setup_routes(self, mapper):
150
 
        super(APIRouterV10, self)._setup_routes(mapper, '1.0')
 
181
        self._setup_base_routes(mapper, '1.0')
151
182
 
152
183
        mapper.resource("shared_ip_group", "shared_ip_groups",
153
184
                        collection={'detail': 'GET'},
162
193
class APIRouterV11(APIRouter):
163
194
    """Define routes specific to OpenStack API V1.1."""
164
195
 
 
196
    def _mapper(self):
 
197
        return ProjectMapper()
 
198
 
165
199
    def _setup_routes(self, mapper):
166
 
        super(APIRouterV11, self)._setup_routes(mapper, '1.1')
 
200
        self._setup_base_routes(mapper, '1.1')
 
201
 
167
202
        image_metadata_controller = image_metadata.create_resource()
 
203
 
168
204
        mapper.resource("image_meta", "metadata",
169
205
                        controller=image_metadata_controller,
170
206
                        parent_resource=dict(member_name='image',
171
207
                        collection_name='images'))
172
208
 
173
 
        mapper.connect("metadata", "/images/{image_id}/metadata",
 
209
        mapper.connect("metadata", "/{project_id}/images/{image_id}/metadata",
174
210
                       controller=image_metadata_controller,
175
211
                       action='update_all',
176
212
                       conditions={"method": ['PUT']})
177
213
 
178
 
        mapper.resource("server_meta", "meta",
179
 
                        controller=server_metadata.create_resource(),
 
214
        server_metadata_controller = server_metadata.create_resource()
 
215
 
 
216
        mapper.resource("server_meta", "metadata",
 
217
                        controller=server_metadata_controller,
180
218
                        parent_resource=dict(member_name='server',
181
219
                        collection_name='servers'))
 
220
 
 
221
        mapper.connect("metadata",
 
222
                       "/{project_id}/servers/{server_id}/metadata",
 
223
                       controller=server_metadata_controller,
 
224
                       action='update_all',
 
225
                       conditions={"method": ['PUT']})