¡@

Home 

OpenStack Study: server_start_stop.py

OpenStack Index

**** CubicPower OpenStack Study ****

# Copyright 2012 Midokura Japan K.K.

#

# Licensed under the Apache License, Version 2.0 (the "License"); you may

# not use this file except in compliance with the License. You may obtain

# a copy of the License at

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

# License for the specific language governing permissions and limitations

# under the License.

import webob

from nova.api.openstack import extensions

from nova.api.openstack import wsgi

from nova import compute

from nova import exception

from nova.objects import instance as instance_obj

from nova.openstack.common.gettextutils import _

from nova.openstack.common import log as logging

LOG = logging.getLogger(__name__)

**** CubicPower OpenStack Study ****

class ServerStartStopActionController(wsgi.Controller):

**** CubicPower OpenStack Study ****

    def __init__(self, *args, **kwargs):

        super(ServerStartStopActionController, self).__init__(*args, **kwargs)

        self.compute_api = compute.API()

**** CubicPower OpenStack Study ****

    def _get_instance(self, context, instance_uuid):

        try:

            attrs = ['system_metadata', 'metadata']

            return instance_obj.Instance.get_by_uuid(context, instance_uuid,

                                                     expected_attrs=attrs)

        except exception.NotFound:

            msg = _("Instance not found")

            raise webob.exc.HTTPNotFound(explanation=msg)

    @wsgi.action('os-start')

**** CubicPower OpenStack Study ****

    def _start_server(self, req, id, body):

        """Start an instance."""

        context = req.environ['nova.context']

        instance = self._get_instance(context, id)

        extensions.check_compute_policy(context, 'start', instance)

        LOG.debug(_('start instance'), instance=instance)

        try:

            self.compute_api.start(context, instance)

        except (exception.InstanceNotReady, exception.InstanceIsLocked,

                exception.InstanceInvalidState) as e:

            raise webob.exc.HTTPConflict(explanation=e.format_message())

        return webob.Response(status_int=202)

    @wsgi.action('os-stop')

**** CubicPower OpenStack Study ****

    def _stop_server(self, req, id, body):

        """Stop an instance."""

        context = req.environ['nova.context']

        instance = self._get_instance(context, id)

        extensions.check_compute_policy(context, 'stop', instance)

        LOG.debug(_('stop instance'), instance=instance)

        try:

            self.compute_api.stop(context, instance)

        except (exception.InstanceNotReady, exception.InstanceIsLocked,

                exception.InstanceInvalidState) as e:

            raise webob.exc.HTTPConflict(explanation=e.format_message())

        return webob.Response(status_int=202)

**** CubicPower OpenStack Study ****

class Server_start_stop(extensions.ExtensionDescriptor):

"""Start/Stop instance compute API support."""

name = "ServerStartStop"

alias = "os-server-start-stop"

namespace = "http://docs.openstack.org/compute/ext/servers/api/v1.1"

updated = "2012-01-23T00:00:00+00:00"

**** CubicPower OpenStack Study ****

    def get_controller_extensions(self):

        controller = ServerStartStopActionController()

        extension = extensions.ControllerExtension(self, 'servers', controller)

        return [extension]