39efc2bde8
This patch adds support for migration of share servers. This migration is performed using a two-phase approach. Administrators are now able to request the migration of a share server within and across backends, with the possibility of chooosing a different share network for the destination share server. - A new field called `task_state` was added to the share server model in order to help the administrator to track the share server migration steps. A new field called `source_share_server_id` was added to link destination and source share servers. - A new periodic task was added to track migration of share servers and its resources. - Two new states were added: `server_migrating` and `server_migrating_to` to represent that share migration is in progress. - When performing the server migration, manila will not go to the scheduler, instead it will provide a request spec to drivers during migration check driver call. It'll be up to the driver validate if there is free space to handle the share server. - A new API called `share-server-migration-check' was added to check the feasibility of a migration, before actually triggering the start operation. APIImpact DocImpact Partially Implements: bp share-server-migration Co-Authored-By: Andre Beltrami <debeltrami@gmail.com> Co-Authored-By: Carlos Eduardo <ces.eduardo98@gmail.com> Co-Authored-By: Felipe Rodrigues <felipefuty01@gmail.com> Change-Id: Ic0751027d2c3f1ef7ab0f7836baff3070a230cfd Signed-off-by: Douglas Viroel <viroel@gmail.com>
123 lines
5.5 KiB
Bash
Executable File
123 lines
5.5 KiB
Bash
Executable File
#!/bin/bash -xe
|
|
#
|
|
# 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.
|
|
|
|
# This script is executed inside pre_test_hook function in devstack gate.
|
|
# First argument ($1) expects boolean as value where:
|
|
# 'False' means share driver will not handle share servers
|
|
# 'True' means it will handle share servers.
|
|
|
|
# Import devstack function 'trueorfalse', 'deprecated'
|
|
source $BASE/new/devstack/functions
|
|
|
|
deprecated "Manila's pre_test_hook and post_test_hook scripts are DEPRECATED. Please use alternate tools to configure devstack's local.conf file"
|
|
|
|
localconf=$BASE/new/devstack/local.conf
|
|
|
|
echo "[[local|localrc]]" >> $localconf
|
|
echo "DEVSTACK_GATE_TEMPEST_ALLOW_TENANT_ISOLATION=1" >> $localconf
|
|
echo "API_RATE_LIMIT=False" >> $localconf
|
|
echo "VOLUME_BACKING_FILE_SIZE=22G" >> $localconf
|
|
echo "CINDER_LVM_TYPE=thin" >> $localconf
|
|
|
|
# Set DevStack's PYTHON3_VERSION variable if CI scripts specify it
|
|
if [[ ! -z "$PYTHON3_VERSION" ]]; then
|
|
echo "PYTHON3_VERSION=$PYTHON3_VERSION" >> $localconf
|
|
fi
|
|
|
|
# NOTE(mkoderer): switch to keystone v3 by default
|
|
echo "IDENTITY_API_VERSION=3" >> $localconf
|
|
|
|
# NOTE(vponomaryov): Set oversubscription ratio for Cinder LVM driver
|
|
# bigger than 1.0, because in CI we do not need such small value.
|
|
# It will allow us to avoid exceeding real capacity in CI test runs.
|
|
echo "CINDER_OVERSUBSCRIPTION_RATIO=100.0" >> $localconf
|
|
echo "MANILA_BACKEND1_CONFIG_GROUP_NAME=london" >> $localconf
|
|
echo "MANILA_BACKEND2_CONFIG_GROUP_NAME=paris" >> $localconf
|
|
echo "MANILA_SHARE_BACKEND1_NAME=LONDON" >> $localconf
|
|
echo "MANILA_SHARE_BACKEND2_NAME=PARIS" >> $localconf
|
|
|
|
echo "MANILA_INSTALL_TEMPEST_PLUGIN_SYSTEMWIDE=${MANILA_INSTALL_TEMPEST_PLUGIN_SYSTEMWIDE:=True}" >> $localconf
|
|
|
|
echo "MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST=${MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST:=False}" >> $localconf
|
|
|
|
# === Handle script arguments ===
|
|
# First argument is expected to be a boolean-like value for DHSS.
|
|
DHSS=$1
|
|
DHSS=$(trueorfalse True DHSS)
|
|
|
|
# Second argument is expected to have codename of a share driver.
|
|
DRIVER=$2
|
|
|
|
# Third argument is expected to contain value equal either to 'singlebackend'
|
|
# or 'multibackend' that defines how many back-ends should be configured.
|
|
BACK_END_TYPE=$3
|
|
|
|
echo "MANILA_OPTGROUP_london_driver_handles_share_servers=$DHSS" >> $localconf
|
|
echo "MANILA_OPTGROUP_paris_driver_handles_share_servers=$DHSS" >> $localconf
|
|
echo "MANILA_USE_SERVICE_INSTANCE_PASSWORD=True" >> $localconf
|
|
echo "MANILA_USE_DOWNGRADE_MIGRATIONS=True" >> $localconf
|
|
|
|
if [[ "$BACK_END_TYPE" == "multibackend" ]]; then
|
|
echo "MANILA_MULTI_BACKEND=True" >> $localconf
|
|
else
|
|
echo "MANILA_MULTI_BACKEND=False" >> $localconf
|
|
fi
|
|
|
|
# Set MANILA_ADMIN_NET_RANGE for admin_network and data_service IP
|
|
echo "MANILA_ADMIN_NET_RANGE=${MANILA_ADMIN_NET_RANGE:=10.2.5.0/24}" >> $localconf
|
|
echo "MANILA_DATA_NODE_IP=${MANILA_DATA_NODE_IP:=$MANILA_ADMIN_NET_RANGE}" >> $localconf
|
|
echo "MANILA_DATA_COPY_CHECK_HASH=${MANILA_DATA_COPY_CHECK_HASH:=True}" >> $localconf
|
|
|
|
# Share Migration CI tests migration_continue period task interval
|
|
echo "MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL=${MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL:=1}" >> $localconf
|
|
# Share Server Migration CI tests migration_continue period task interval
|
|
echo "MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL=${MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL:=10}" >> $localconf
|
|
|
|
MANILA_SERVICE_IMAGE_ENABLED=${MANILA_SERVICE_IMAGE_ENABLED:-False}
|
|
DEFAULT_EXTRA_SPECS=${DEFAULT_EXTRA_SPECS:-"'snapshot_support=True create_share_from_snapshot_support=True'"}
|
|
|
|
if [[ "$DRIVER" == "windows" ]]; then
|
|
MANILA_SERVICE_IMAGE_ENABLED=True
|
|
echo "SHARE_DRIVER=manila.share.drivers.windows.windows_smb_driver.WindowsSMBDriver" >> $localconf
|
|
fi
|
|
|
|
echo "MANILA_SERVICE_IMAGE_ENABLED=$MANILA_SERVICE_IMAGE_ENABLED" >> $localconf
|
|
if [[ "$MANILA_SERVICE_IMAGE_ENABLED" == True ]]; then
|
|
echo "MANILA_SERVICE_IMAGE_URL=$MANILA_SERVICE_IMAGE_URL" >> $localconf
|
|
echo "MANILA_SERVICE_IMAGE_NAME=$MANILA_SERVICE_IMAGE_NAME" >> $localconf
|
|
fi
|
|
echo "MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS=$DEFAULT_EXTRA_SPECS" >> $localconf
|
|
echo "MANILA_CONFIGURE_DEFAULT_TYPES=${MANILA_CONFIGURE_DEFAULT_TYPES:-True}" >> $localconf
|
|
|
|
# Enabling isolated metadata in Neutron is required because
|
|
# Tempest creates isolated networks and created vm's in scenario tests don't
|
|
# have access to Nova Metadata service. This leads to unavailability of
|
|
# created vm's in scenario tests.
|
|
echo "ENABLE_ISOLATED_METADATA=True" >> $localconf
|
|
|
|
echo "TEMPEST_USE_TEST_ACCOUNTS=True" >> $localconf
|
|
echo "TEMPEST_ALLOW_TENANT_ISOLATION=False" >> $localconf
|
|
echo "TEMPEST_CONCURRENCY=${MANILA_TEMPEST_CONCURRENCY:-8}" >> $localconf
|
|
|
|
MANILA_SETUP_IPV6=${MANILA_SETUP_IPV6:-False}
|
|
echo "MANILA_SETUP_IPV6=${MANILA_SETUP_IPV6}" >> $localconf
|
|
if [[ "$MANILA_SETUP_IPV6" == True ]]; then
|
|
# When setting up proper IPv6 networks, we should do it ourselves so we can
|
|
# use Neutron Dynamic Routing plugin with address scopes instead of the
|
|
# regular Neutron DevStack configuration.
|
|
echo "NEUTRON_CREATE_INITIAL_NETWORKS=False" >> $localconf
|
|
echo "IP_VERSION=4+6" >> $localconf
|
|
echo "MANILA_RESTORE_IPV6_DEFAULT_ROUTE=False" >> $localconf
|
|
fi
|