Repository URL to install this package:
Version:
4.2.19 ▾
|
# Copyright 2018 TrilioData Inc.
# All Rights Reserved.
import copy
from oslo_log import log as logging
import oslo_messaging as messaging
from oslo_utils import strutils
from oslo_utils import timeutils
from oslo_utils import uuidutils
import six
import webob
from webob import exc
from dmapi.api.openstack import api_version_request
from dmapi.api.openstack import common
from dmapi.api.openstack.dm.schemas import servers as schema_servers
from dmapi.api.openstack import wsgi
from dmapi.api import validation
import dmapi.conf
from dmapi import context as dmapi_context
from dmapi import exception
from dmapi.policies import servers as server_policies
from dmapi import utils
TAG_SEARCH_FILTERS = ('tags', 'tags-any', 'not-tags', 'not-tags-any')
DEVICE_TAGGING_MIN_COMPUTE_VERSION = 14
CONF = dmapi.conf.CONF
LOG = logging.getLogger(__name__)
class ServersController(wsgi.Controller):
"""The Server API base controller class for the DM API."""
def __init__(self, **kwargs):
super(ServersController, self).__init__(**kwargs)
self.dm_api = None
@wsgi.response(202)
@wsgi.expected_errors((404, 409))
@wsgi.action('reboot')
@validation.schema(schema_servers.reboot)
def _action_reboot(self, req, id, body):
reboot_type = body['reboot']['type'].upper()
context = req.environ['dmapi.context']
context.can(server_policies.SERVERS % 'reboot')
instance = self._get_server(context, req, id)
try:
self.dm_api.reboot(context, instance, reboot_type)
except exception.InstanceIsLocked as e:
raise exc.HTTPConflict(explanation=e.format_message())
except exception.InstanceInvalidState as state_error:
common.raise_http_conflict_for_instance_invalid_state(state_error,
'reboot', id)