Merge "Port services to core API"
This commit is contained in:
commit
f15e0bf123
@ -7,6 +7,9 @@
|
|||||||
|
|
||||||
"availability_zone:index": "rule:default",
|
"availability_zone:index": "rule:default",
|
||||||
|
|
||||||
|
"service:index": "rule:admin_api",
|
||||||
|
"service:update": "rule:admin_api",
|
||||||
|
|
||||||
"share:create": "",
|
"share:create": "",
|
||||||
"share:delete": "rule:default",
|
"share:delete": "rule:default",
|
||||||
"share:get": "rule:default",
|
"share:get": "rule:default",
|
||||||
@ -54,7 +57,6 @@
|
|||||||
"share_extension:cgsnapshot_admin_actions:force_delete": "rule:admin_api",
|
"share_extension:cgsnapshot_admin_actions:force_delete": "rule:admin_api",
|
||||||
"share_extension:cgsnapshot_admin_actions:reset_status": "rule:admin_api",
|
"share_extension:cgsnapshot_admin_actions:reset_status": "rule:admin_api",
|
||||||
|
|
||||||
"share_extension:services": "rule:admin_api",
|
|
||||||
"share_extension:availability_zones": "",
|
"share_extension:availability_zones": "",
|
||||||
|
|
||||||
"share_extension:types_manage": "rule:admin_api",
|
"share_extension:types_manage": "rule:admin_api",
|
||||||
|
@ -29,6 +29,7 @@ from manila.api.v1 import consistency_groups
|
|||||||
from manila.api.v1 import limits
|
from manila.api.v1 import limits
|
||||||
from manila.api.v1 import scheduler_stats
|
from manila.api.v1 import scheduler_stats
|
||||||
from manila.api.v1 import security_service
|
from manila.api.v1 import security_service
|
||||||
|
from manila.api.v1 import services
|
||||||
from manila.api.v1 import share_instances
|
from manila.api.v1 import share_instances
|
||||||
from manila.api.v1 import share_manage
|
from manila.api.v1 import share_manage
|
||||||
from manila.api.v1 import share_metadata
|
from manila.api.v1 import share_metadata
|
||||||
@ -67,6 +68,13 @@ class APIRouter(manila.api.openstack.APIRouter):
|
|||||||
"os-availability-zone",
|
"os-availability-zone",
|
||||||
controller=self.resources["availability_zones"])
|
controller=self.resources["availability_zones"])
|
||||||
|
|
||||||
|
self.resources["services"] = services.create_resource()
|
||||||
|
mapper.resource("service",
|
||||||
|
# TODO(vponomaryov): rename 'os-services' to
|
||||||
|
# 'services' when API urls rename happens.
|
||||||
|
"os-services",
|
||||||
|
controller=self.resources["services"])
|
||||||
|
|
||||||
self.resources["share_manage"] = share_manage.create_resource()
|
self.resources["share_manage"] = share_manage.create_resource()
|
||||||
mapper.resource("share_manage",
|
mapper.resource("share_manage",
|
||||||
# TODO(vponomaryov): remove it when it is ported
|
# TODO(vponomaryov): remove it when it is ported
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# Copyright 2012 IBM Corp.
|
# Copyright 2012 IBM Corp.
|
||||||
|
# Copyright (c) 2015 Mirantis inc.
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
@ -16,20 +17,25 @@
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import webob.exc
|
import webob.exc
|
||||||
|
|
||||||
from manila.api import extensions
|
from manila.api.openstack import wsgi
|
||||||
|
from manila.api.views import services as services_views
|
||||||
from manila import db
|
from manila import db
|
||||||
from manila import exception
|
|
||||||
from manila import utils
|
from manila import utils
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
authorize = extensions.extension_authorizer('share', 'services')
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceController(object):
|
class ServiceController(wsgi.Controller):
|
||||||
|
"""The Services API controller for the OpenStack API."""
|
||||||
|
|
||||||
|
resource_name = "service"
|
||||||
|
_view_builder_class = services_views.ViewBuilder
|
||||||
|
|
||||||
def index(self, req):
|
def index(self, req):
|
||||||
"""Return a list of all running services."""
|
"""Return a list of all running services."""
|
||||||
|
|
||||||
context = req.environ['manila.context']
|
context = req.environ['manila.context']
|
||||||
authorize(context)
|
self.authorize(context, 'index')
|
||||||
all_services = db.service_get_all(context)
|
all_services = db.service_get_all(context)
|
||||||
|
|
||||||
services = []
|
services = []
|
||||||
@ -60,48 +66,32 @@ class ServiceController(object):
|
|||||||
if len(services) == 0:
|
if len(services) == 0:
|
||||||
break
|
break
|
||||||
|
|
||||||
return {'services': services}
|
return self._view_builder.detail_list(services)
|
||||||
|
|
||||||
def update(self, req, id, body):
|
def update(self, req, id, body):
|
||||||
"""Enable/Disable scheduling for a service."""
|
"""Enable/Disable scheduling for a service."""
|
||||||
context = req.environ['manila.context']
|
context = req.environ['manila.context']
|
||||||
authorize(context)
|
self.authorize(context, 'update')
|
||||||
|
|
||||||
if id == "enable":
|
if id == "enable":
|
||||||
disabled = False
|
data = {'disabled': False}
|
||||||
elif id == "disable":
|
elif id == "disable":
|
||||||
disabled = True
|
data = {'disabled': True}
|
||||||
else:
|
else:
|
||||||
raise webob.exc.HTTPNotFound("Unknown action")
|
raise webob.exc.HTTPNotFound("Unknown action '%s'" % id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
host = body['host']
|
data['host'] = body['host']
|
||||||
binary = body['binary']
|
data['binary'] = body['binary']
|
||||||
except (TypeError, KeyError):
|
except (TypeError, KeyError):
|
||||||
raise webob.exc.HTTPBadRequest()
|
raise webob.exc.HTTPBadRequest()
|
||||||
|
|
||||||
try:
|
svc = db.service_get_by_args(context, data['host'], data['binary'])
|
||||||
svc = db.service_get_by_args(context, host, binary)
|
db.service_update(
|
||||||
if not svc:
|
context, svc['id'], {'disabled': data['disabled']})
|
||||||
raise webob.exc.HTTPNotFound('Unknown service')
|
|
||||||
|
|
||||||
db.service_update(context, svc['id'], {'disabled': disabled})
|
return self._view_builder.summary(data)
|
||||||
except exception.ServiceNotFound:
|
|
||||||
raise webob.exc.HTTPNotFound("service not found")
|
|
||||||
|
|
||||||
return {'host': host, 'binary': binary, 'disabled': disabled}
|
|
||||||
|
|
||||||
|
|
||||||
class Services(extensions.ExtensionDescriptor):
|
def create_resource():
|
||||||
"""Services support."""
|
return wsgi.Resource(ServiceController())
|
||||||
|
|
||||||
name = "Services"
|
|
||||||
alias = "os-services"
|
|
||||||
updated = "2012-10-28T00:00:00-00:00"
|
|
||||||
|
|
||||||
def get_resources(self):
|
|
||||||
resources = []
|
|
||||||
resource = extensions.ResourceExtension('os-services',
|
|
||||||
ServiceController())
|
|
||||||
resources.append(resource)
|
|
||||||
return resources
|
|
32
manila/api/views/services.py
Normal file
32
manila/api/views/services.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Copyright (c) 2015 Mirantis inc.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# 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 manila.api import common
|
||||||
|
|
||||||
|
|
||||||
|
class ViewBuilder(common.ViewBuilder):
|
||||||
|
|
||||||
|
_collection_name = "services"
|
||||||
|
|
||||||
|
def summary(self, service):
|
||||||
|
"""Summary view of a single service."""
|
||||||
|
keys = 'host', 'binary', 'disabled'
|
||||||
|
return {key: service.get(key) for key in keys}
|
||||||
|
|
||||||
|
def detail_list(self, services):
|
||||||
|
"""Detailed view of a list of services."""
|
||||||
|
keys = 'id', 'binary', 'host', 'zone', 'status', 'state', 'updated_at'
|
||||||
|
views = [{key: s.get(key) for key in keys} for s in services]
|
||||||
|
return {self._collection_name: views}
|
@ -19,7 +19,7 @@ import datetime
|
|||||||
|
|
||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
|
|
||||||
from manila.api.contrib import services
|
from manila.api.v1 import services
|
||||||
from manila import context
|
from manila import context
|
||||||
from manila import db
|
from manila import db
|
||||||
from manila import exception
|
from manila import exception
|
@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
"availability_zone:index": "rule:default",
|
"availability_zone:index": "rule:default",
|
||||||
|
|
||||||
|
"service:index": "rule:admin_api",
|
||||||
|
"service:update": "rule:admin_api",
|
||||||
|
|
||||||
"share:create": "",
|
"share:create": "",
|
||||||
"share:list_by_share_server_id": "rule:admin_api",
|
"share:list_by_share_server_id": "rule:admin_api",
|
||||||
"share:get": "",
|
"share:get": "",
|
||||||
|
Loading…
Reference in New Issue
Block a user