deb-manila/manila/scheduler/rpcapi.py
Rodrigo Barbieri 6dad1666de Add share type change to Share Migration
This patch adds a 'new_share_type_id' parameter to Share Migration,
where the destination share can be provisioned under a different
share type of choice.

Host-assisted migration handles it by creating a totally new share,
as before.

Driver-assisted migration handles by creating the destination
instance model with the new share type, the driver is responsible
for making the necessary changes to satisfy the provided model.

In order to accomplish this, a database change was required,
transferring the 'share_type_id' field from the 'shares' table
to the 'share_instances' table.

APIImpact

Partially implements: blueprint newton-migration-improvements
Change-Id: I3200eaaa5b66d9b8ce1cbd16c1658db8516c70fb
2016-08-31 21:07:47 -03:00

122 lines
4.9 KiB
Python

# Copyright 2012, Red Hat, Inc.
#
# 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.
"""
Client side of the scheduler manager RPC API.
"""
from oslo_config import cfg
import oslo_messaging as messaging
from oslo_serialization import jsonutils
from manila import rpc
CONF = cfg.CONF
class SchedulerAPI(object):
"""Client side of the scheduler rpc API.
API version history:
1.0 - Initial version.
1.1 - Add get_pools method
1.2 - Introduce Share Instances. Replace ``create_share()`` with
``create_share_instance()``
1.3 - Add create_consistency_group method
1.4 - Add migrate_share_to_host method
1.5 - Add create_share_replica
1.6 - Add manage_share
"""
RPC_API_VERSION = '1.6'
def __init__(self):
super(SchedulerAPI, self).__init__()
target = messaging.Target(topic=CONF.scheduler_topic,
version=self.RPC_API_VERSION)
self.client = rpc.get_client(target, version_cap='1.6')
def create_share_instance(self, context, request_spec=None,
filter_properties=None):
request_spec_p = jsonutils.to_primitive(request_spec)
call_context = self.client.prepare(version='1.2')
return call_context.cast(context,
'create_share_instance',
request_spec=request_spec_p,
filter_properties=filter_properties)
def update_service_capabilities(self, context,
service_name, host,
capabilities):
call_context = self.client.prepare(fanout=True, version='1.0')
call_context.cast(context,
'update_service_capabilities',
service_name=service_name,
host=host,
capabilities=capabilities)
def get_pools(self, context, filters=None):
call_context = self.client.prepare(version='1.1')
return call_context.call(context, 'get_pools', filters=filters)
def create_consistency_group(self, context, cg_id, request_spec=None,
filter_properties=None):
request_spec_p = jsonutils.to_primitive(request_spec)
call_context = self.client.prepare(version='1.3')
return call_context.cast(context,
'create_consistency_group',
cg_id=cg_id,
request_spec=request_spec_p,
filter_properties=filter_properties)
def migrate_share_to_host(
self, context, share_id, host, force_host_assisted_migration,
preserve_metadata, writable, nondisruptive, new_share_network_id,
new_share_type_id, request_spec=None, filter_properties=None):
call_context = self.client.prepare(version='1.4')
request_spec_p = jsonutils.to_primitive(request_spec)
return call_context.cast(
context, 'migrate_share_to_host',
share_id=share_id,
host=host,
force_host_assisted_migration=force_host_assisted_migration,
preserve_metadata=preserve_metadata,
writable=writable,
nondisruptive=nondisruptive,
new_share_network_id=new_share_network_id,
new_share_type_id=new_share_type_id,
request_spec=request_spec_p,
filter_properties=filter_properties)
def create_share_replica(self, context, request_spec=None,
filter_properties=None):
request_spec_p = jsonutils.to_primitive(request_spec)
call_context = self.client.prepare(version='1.5')
return call_context.cast(context,
'create_share_replica',
request_spec=request_spec_p,
filter_properties=filter_properties)
def manage_share(self, context, share_id, driver_options,
request_spec=None, filter_properties=None):
call_context = self.client.prepare(version='1.6')
return call_context.cast(context, 'manage_share',
share_id=share_id,
driver_options=driver_options,
request_spec=request_spec,
filter_properties=filter_properties)