1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-02-28 17:57:22 +03:00

Feature #3987: refactor save and restore

This commit is contained in:
Jaime Melis 2015-10-29 16:24:39 +01:00
parent 97a6af6324
commit 1111a6eed1
5 changed files with 163 additions and 72 deletions

View File

@ -672,9 +672,11 @@ VMM_EXEC_KVM_SCRIPTS="src/vmm_mad/remotes/kvm/cancel \
src/vmm_mad/remotes/kvm/migrate \ src/vmm_mad/remotes/kvm/migrate \
src/vmm_mad/remotes/kvm/migrate_local \ src/vmm_mad/remotes/kvm/migrate_local \
src/vmm_mad/remotes/kvm/restore \ src/vmm_mad/remotes/kvm/restore \
src/vmm_mad/remotes/kvm/restore.ceph \
src/vmm_mad/remotes/kvm/reboot \ src/vmm_mad/remotes/kvm/reboot \
src/vmm_mad/remotes/kvm/reset \ src/vmm_mad/remotes/kvm/reset \
src/vmm_mad/remotes/kvm/save \ src/vmm_mad/remotes/kvm/save \
src/vmm_mad/remotes/kvm/save.ceph \
src/vmm_mad/remotes/kvm/poll \ src/vmm_mad/remotes/kvm/poll \
src/vmm_mad/remotes/kvm/attach_disk \ src/vmm_mad/remotes/kvm/attach_disk \
src/vmm_mad/remotes/kvm/detach_disk \ src/vmm_mad/remotes/kvm/detach_disk \

View File

@ -16,11 +16,11 @@
# limitations under the License. # # limitations under the License. #
#--------------------------------------------------------------------------- # #--------------------------------------------------------------------------- #
source $(dirname $0)/kvmrc
source $(dirname $0)/../../scripts_common.sh
DRIVER_PATH=$(dirname $0) DRIVER_PATH=$(dirname $0)
source $DRIVER_PATH/kvmrc
source $DRIVER_PATH/../../scripts_common.sh
FILE=$1 FILE=$1
HOST=$2 HOST=$2
DEPLOY_ID=$3 DEPLOY_ID=$3
@ -31,44 +31,25 @@ DS_ID=$5
FILE_XML=${FILE}.xml FILE_XML=${FILE}.xml
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Ceph # Handle DRV_MESSAGE coming from stdin
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin" if [ ! -t 0 ]; then
# There is data in stdin, read it
DRV_MESSAGE=$(cat)
while IFS= read -r -d '' element; do # The data is the driver message. Extracting the System DS TM_MAD
XPATH_ELEMENTS[i++]="$element" XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
done < <(cat | $XPATH \ TM_MAD=$(echo "$DRV_MESSAGE" | $XPATH /VMM_DRIVER_ACTION_DATA/DATASTORE/TM_MAD)
/VMM_DRIVER_ACTION_DATA/DATASTORE/TM_MAD \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RBD_FORMAT)
# If there is a specific hook for this TM_MAD call it:
RESTORE_TM_FILE="${DRIVER_PATH}/restore.${TM_MAD}"
TM_MAD="${XPATH_ELEMENTS[j++]}" if [ -x "$RESTORE_TM_FILE" ]; then
CEPH_USER="${XPATH_ELEMENTS[j++]}" echo "$DRV_MESSAGE" | $RESTORE_TM_FILE $@
CEPH_CONF="${XPATH_ELEMENTS[j++]}" fi
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
RBD_FORMAT="${XPATH_ELEMENTS[j++]:-$RBD_FORMAT}"
if [ -n "$CEPH_USER" ]; then
RBD="$RBD --id ${CEPH_USER}"
fi fi
if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ "$RBD_FORMAT" = "2" ]; then
FORMAT_OPT="--image-format 2"
fi
RBD_SOURCE="${POOL_NAME}/one-sys-${VM_ID}-checkpoint"
exec_and_log "$RBD export $RBD_SOURCE $FILE" "Error exporting checkpoint into from $RBD_SOURCE to $FILE"
exec_and_log "$RBD rm $RBD_SOURCE" "Error removing checkpoint $RBD_SOURCE"
# Checkpoint file: /var/lib/one//datastores/<DS_ID>/<VM_ID>/checkpoint # Checkpoint file: /var/lib/one//datastores/<DS_ID>/<VM_ID>/checkpoint
DS_ID=$(basename $(dirname $(dirname $FILE))) DS_ID=$(basename $(dirname $(dirname $FILE)))

View File

@ -0,0 +1,61 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2015, OpenNebula Project, OpenNebula Systems #
# #
# 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. #
#--------------------------------------------------------------------------- #
DRIVER_PATH=$(dirname $0)
source $DRIVER_PATH/kvmrc
source $DRIVER_PATH/../../scripts_common.sh
FILE=$1
HOST=$2
DEPLOY_ID=$3
VM_ID=$4
DS_ID=$5
#-------------------------------------------------------------------------------
# Ceph
#-------------------------------------------------------------------------------
source ${DRIVER_PATH}/../../datastore/ceph/ceph.conf
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(cat | $XPATH \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME)
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
if [ -n "$CEPH_USER" ]; then
RBD="$RBD --id ${CEPH_USER}"
fi
if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
RBD_SOURCE="${POOL_NAME}/one-sys-${VM_ID}-checkpoint"
exec_and_log "$RBD export $RBD_SOURCE $FILE" "Error exporting checkpoint into from $RBD_SOURCE to $FILE"
exec_and_log "$RBD rm $RBD_SOURCE" "Error removing checkpoint $RBD_SOURCE"

View File

@ -16,11 +16,11 @@
# limitations under the License. # # limitations under the License. #
#--------------------------------------------------------------------------- # #--------------------------------------------------------------------------- #
source $(dirname $0)/kvmrc
source $(dirname $0)/../../scripts_common.sh
DRIVER_PATH=$(dirname $0) DRIVER_PATH=$(dirname $0)
source $DRIVER_PATH/kvmrc
source $DRIVER_PATH/../../scripts_common.sh
DEPLOY_ID=$1 DEPLOY_ID=$1
FILE=$2 FILE=$2
@ -42,45 +42,24 @@ exec_and_log "virsh --connect $LIBVIRT_URI save $DEPLOY_ID $FILE" \
"Could not save $DEPLOY_ID to $FILE" "Could not save $DEPLOY_ID to $FILE"
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Ceph # Handle DRV_MESSAGE coming from stdin
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
source ${DRIVER_PATH}/../../datastore/ceph/ceph.conf # Exit if no stdin data is available
if [ -t 0 ]; then
exit 0
fi
# There is data in stdin, read it
DRV_MESSAGE=$(cat)
# The data is the driver message. Extracting the System DS TM_MAD
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin" XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
TM_MAD=$(echo "$DRV_MESSAGE" | $XPATH /VMM_DRIVER_ACTION_DATA/DATASTORE/TM_MAD)
unset i j XPATH_ELEMENTS # If there is a specific hook for this TM_MAD call it:
SAVE_TM_FILE="${DRIVER_PATH}/save.${TM_MAD}"
while IFS= read -r -d '' element; do if [ -x "$SAVE_TM_FILE" ]; then
XPATH_ELEMENTS[i++]="$element" echo "$DRV_MESSAGE" | $SAVE_TM_FILE $@
done < <(cat | $XPATH \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TM_MAD \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RBD_FORMAT)
TM_MAD="${XPATH_ELEMENTS[j++]}"
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
RBD_FORMAT="${XPATH_ELEMENTS[j++]:-$RBD_FORMAT}"
if [ -n "$CEPH_USER" ]; then
RBD="$RBD --id ${CEPH_USER}"
fi fi
if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ "$RBD_FORMAT" = "2" ]; then
FORMAT_OPT="--image-format 2"
fi
RBD_SOURCE="${POOL_NAME}/one-sys-${VM_ID}-checkpoint"
exec_and_log "$RBD import $FORMAT_OPT $FILE $RBD_SOURCE" "Error importing checkpoint into $RBD_SOURCE"
exec_and_log "$RM -f $FILE" "Error removing checkpoint ($FILE)"
exit 0

View File

@ -0,0 +1,68 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2015, OpenNebula Project, OpenNebula Systems #
# #
# 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. #
#--------------------------------------------------------------------------- #
DRIVER_PATH=$(dirname $0)
source $DRIVER_PATH/kvmrc
source $DRIVER_PATH/../../scripts_common.sh
DEPLOY_ID=$1
FILE=$2
VM_ID=$4
DS_ID=$5
#-------------------------------------------------------------------------------
source ${DRIVER_PATH}/../../datastore/ceph/ceph.conf
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
unset i j XPATH_ELEMENTS
while IFS= read -r -d '' element; do
XPATH_ELEMENTS[i++]="$element"
done < <(cat | $XPATH \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_USER \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/CEPH_CONF \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/POOL_NAME \
/VMM_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RBD_FORMAT)
CEPH_USER="${XPATH_ELEMENTS[j++]}"
CEPH_CONF="${XPATH_ELEMENTS[j++]}"
POOL_NAME="${XPATH_ELEMENTS[j++]:-$POOL_NAME}"
RBD_FORMAT="${XPATH_ELEMENTS[j++]:-$RBD_FORMAT}"
if [ -n "$CEPH_USER" ]; then
RBD="$RBD --id ${CEPH_USER}"
fi
if [ -n "$CEPH_CONF" ]; then
RBD="$RBD --conf ${CEPH_CONF}"
fi
if [ "$RBD_FORMAT" = "2" ]; then
FORMAT_OPT="--image-format 2"
fi
RBD_SOURCE="${POOL_NAME}/one-sys-${VM_ID}-checkpoint"
exec_and_log "$RBD import $FORMAT_OPT $FILE $RBD_SOURCE" "Error importing checkpoint into $RBD_SOURCE"
exec_and_log "$RM -f $FILE" "Error removing checkpoint ($FILE)"
exit 0