¡@

Home 

OpenStack Study: admin_password.py

OpenStack Index

**** CubicPower OpenStack Study ****

# Copyright 2013 IBM Corp.

#

# 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.

from webob import exc

from nova.api.openstack import common

from nova.api.openstack.compute.schemas.v3 import admin_password

from nova.api.openstack import extensions

from nova.api.openstack import wsgi

from nova.api import validation

from nova import compute

from nova import exception

from nova.openstack.common.gettextutils import _

ALIAS = "os-admin-password"

authorize = extensions.extension_authorizer('compute', 'v3:%s' % ALIAS)

**** CubicPower OpenStack Study ****

class AdminPasswordController(wsgi.Controller):

**** CubicPower OpenStack Study ****

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

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

        self.compute_api = compute.API()

    @wsgi.action('change_password')

    @wsgi.response(204)

    @extensions.expected_errors((400, 404, 409, 501))

    @validation.schema(admin_password.change_password)

**** CubicPower OpenStack Study ****

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

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

        authorize(context)

        password = body['change_password']['admin_password']

        instance = common.get_instance(self.compute_api, context, id,

                                       want_objects=True)

        try:

            self.compute_api.set_admin_password(context, instance, password)

        except exception.InstancePasswordSetFailed as e:

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

        except exception.InstanceInvalidState as e:

            raise common.raise_http_conflict_for_instance_invalid_state(

                e, 'change_password')

        except NotImplementedError:

            msg = _("Unable to set password on instance")

            raise exc.HTTPNotImplemented(explanation=msg)

**** CubicPower OpenStack Study ****

class AdminPassword(extensions.V3APIExtensionBase):

"""Admin password management support."""

name = "AdminPassword"

alias = ALIAS

version = 1

**** CubicPower OpenStack Study ****

    def get_resources(self):

        return []

**** CubicPower OpenStack Study ****

    def get_controller_extensions(self):

        controller = AdminPasswordController()

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

        return [extension]