~ubuntu-branches/ubuntu/raring/nova/raring-proposed

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})