1.1.49
by Adam Gandelman
Import upstream version 2012.1~rc1~20120316.13416 |
1 |
# Copyright 2011 OpenStack, LLC.
|
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
2 |
#
|
3 |
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
4 |
# not use this file except in compliance with the License. You may obtain
|
|
5 |
# a copy of the License at
|
|
6 |
#
|
|
7 |
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8 |
#
|
|
9 |
# Unless required by applicable law or agreed to in writing, software
|
|
10 |
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
11 |
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
12 |
# License for the specific language governing permissions and limitations
|
|
13 |
# under the License.
|
|
14 |
||
15 |
"""The Extended Status Admin API extension."""
|
|
16 |
||
17 |
from nova.api.openstack import extensions |
|
18 |
from nova.api.openstack import wsgi |
|
19 |
from nova.api.openstack import xmlutil |
|
20 |
from nova import compute |
|
1.1.58
by Chuck Short
Import upstream version 2012.2~f2 |
21 |
from nova.openstack.common import log as logging |
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
22 |
|
1.1.45
by Chuck Short
Import upstream version 2012.1~e4~20120217.12709 |
23 |
LOG = logging.getLogger(__name__) |
1.1.42
by Chuck Short
Import upstream version 2012.1~e3 |
24 |
authorize = extensions.soft_extension_authorizer('compute', 'extended_status') |
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
25 |
|
26 |
||
27 |
class ExtendedStatusController(wsgi.Controller): |
|
28 |
def __init__(self, *args, **kwargs): |
|
29 |
super(ExtendedStatusController, self).__init__(*args, **kwargs) |
|
30 |
self.compute_api = compute.API() |
|
31 |
||
1.1.43
by Chuck Short
Import upstream version 2012.1~e4~20120203.12454 |
32 |
def _extend_server(self, server, instance): |
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
33 |
for state in ['task_state', 'vm_state', 'power_state']: |
34 |
key = "%s:%s" % (Extended_status.alias, state) |
|
1.1.43
by Chuck Short
Import upstream version 2012.1~e4~20120203.12454 |
35 |
server[key] = instance[state] |
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
36 |
|
37 |
@wsgi.extends |
|
38 |
def show(self, req, resp_obj, id): |
|
39 |
context = req.environ['nova.context'] |
|
1.1.42
by Chuck Short
Import upstream version 2012.1~e3 |
40 |
if authorize(context): |
41 |
# Attach our slave template to the response object
|
|
42 |
resp_obj.attach(xml=ExtendedStatusTemplate()) |
|
1.1.58
by Chuck Short
Import upstream version 2012.2~f2 |
43 |
server = resp_obj.obj['server'] |
44 |
db_instance = req.get_db_instance(server['id']) |
|
45 |
# server['id'] is guaranteed to be in the cache due to
|
|
46 |
# the core API adding it in its 'show' method.
|
|
47 |
self._extend_server(server, db_instance) |
|
1.1.43
by Chuck Short
Import upstream version 2012.1~e4~20120203.12454 |
48 |
|
1.1.42
by Chuck Short
Import upstream version 2012.1~e3 |
49 |
@wsgi.extends |
50 |
def detail(self, req, resp_obj): |
|
51 |
context = req.environ['nova.context'] |
|
52 |
if authorize(context): |
|
53 |
# Attach our slave template to the response object
|
|
54 |
resp_obj.attach(xml=ExtendedStatusesTemplate()) |
|
1.1.43
by Chuck Short
Import upstream version 2012.1~e4~20120203.12454 |
55 |
servers = list(resp_obj.obj['servers']) |
1.1.58
by Chuck Short
Import upstream version 2012.2~f2 |
56 |
for server in servers: |
57 |
db_instance = req.get_db_instance(server['id']) |
|
58 |
# server['id'] is guaranteed to be in the cache due to
|
|
59 |
# the core API adding it in its 'detail' method.
|
|
60 |
self._extend_server(server, db_instance) |
|
1.1.43
by Chuck Short
Import upstream version 2012.1~e4~20120203.12454 |
61 |
|
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
62 |
|
63 |
class Extended_status(extensions.ExtensionDescriptor): |
|
64 |
"""Extended Status support"""
|
|
65 |
||
66 |
name = "ExtendedStatus" |
|
67 |
alias = "OS-EXT-STS" |
|
1.1.46
by Chuck Short
Import upstream version 2012.1~e4~20120224.12913 |
68 |
namespace = ("http://docs.openstack.org/compute/ext/" |
69 |
"extended_status/api/v1.1") |
|
1.1.41
by Chuck Short
Import upstream version 2012.1~e3~20120120.12170 |
70 |
updated = "2011-11-03T00:00:00+00:00" |
71 |
||
72 |
def get_controller_extensions(self): |
|
73 |
controller = ExtendedStatusController() |
|
74 |
extension = extensions.ControllerExtension(self, 'servers', controller) |
|
75 |
return [extension] |
|
76 |
||
77 |
||
78 |
def make_server(elem): |
|
79 |
elem.set('{%s}task_state' % Extended_status.namespace, |
|
80 |
'%s:task_state' % Extended_status.alias) |
|
81 |
elem.set('{%s}power_state' % Extended_status.namespace, |
|
82 |
'%s:power_state' % Extended_status.alias) |
|
83 |
elem.set('{%s}vm_state' % Extended_status.namespace, |
|
84 |
'%s:vm_state' % Extended_status.alias) |
|
85 |
||
86 |
||
87 |
class ExtendedStatusTemplate(xmlutil.TemplateBuilder): |
|
88 |
def construct(self): |
|
89 |
root = xmlutil.TemplateElement('server', selector='server') |
|
90 |
make_server(root) |
|
91 |
return xmlutil.SlaveTemplate(root, 1, nsmap={ |
|
92 |
Extended_status.alias: Extended_status.namespace}) |
|
93 |
||
94 |
||
95 |
class ExtendedStatusesTemplate(xmlutil.TemplateBuilder): |
|
96 |
def construct(self): |
|
97 |
root = xmlutil.TemplateElement('servers') |
|
98 |
elem = xmlutil.SubTemplateElement(root, 'server', selector='servers') |
|
99 |
make_server(elem) |
|
100 |
return xmlutil.SlaveTemplate(root, 1, nsmap={ |
|
101 |
Extended_status.alias: Extended_status.namespace}) |