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:
parent
97a6af6324
commit
1111a6eed1
@ -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_local \
|
||||
src/vmm_mad/remotes/kvm/restore \
|
||||
src/vmm_mad/remotes/kvm/restore.ceph \
|
||||
src/vmm_mad/remotes/kvm/reboot \
|
||||
src/vmm_mad/remotes/kvm/reset \
|
||||
src/vmm_mad/remotes/kvm/save \
|
||||
src/vmm_mad/remotes/kvm/save.ceph \
|
||||
src/vmm_mad/remotes/kvm/poll \
|
||||
src/vmm_mad/remotes/kvm/attach_disk \
|
||||
src/vmm_mad/remotes/kvm/detach_disk \
|
||||
|
@ -16,11 +16,11 @@
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
source $(dirname $0)/kvmrc
|
||||
source $(dirname $0)/../../scripts_common.sh
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
source $DRIVER_PATH/kvmrc
|
||||
source $DRIVER_PATH/../../scripts_common.sh
|
||||
|
||||
FILE=$1
|
||||
HOST=$2
|
||||
DEPLOY_ID=$3
|
||||
@ -31,44 +31,25 @@ DS_ID=$5
|
||||
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
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
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)
|
||||
# The data is the driver message. Extracting the System DS TM_MAD
|
||||
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
|
||||
TM_MAD=$(echo "$DRV_MESSAGE" | $XPATH /VMM_DRIVER_ACTION_DATA/DATASTORE/TM_MAD)
|
||||
|
||||
# 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++]}"
|
||||
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}"
|
||||
if [ -x "$RESTORE_TM_FILE" ]; then
|
||||
echo "$DRV_MESSAGE" | $RESTORE_TM_FILE $@
|
||||
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
|
||||
|
||||
DS_ID=$(basename $(dirname $(dirname $FILE)))
|
||||
|
61
src/vmm_mad/remotes/kvm/restore.ceph
Executable file
61
src/vmm_mad/remotes/kvm/restore.ceph
Executable 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"
|
@ -16,11 +16,11 @@
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
source $(dirname $0)/kvmrc
|
||||
source $(dirname $0)/../../scripts_common.sh
|
||||
|
||||
DRIVER_PATH=$(dirname $0)
|
||||
|
||||
source $DRIVER_PATH/kvmrc
|
||||
source $DRIVER_PATH/../../scripts_common.sh
|
||||
|
||||
DEPLOY_ID=$1
|
||||
FILE=$2
|
||||
|
||||
@ -42,45 +42,24 @@ exec_and_log "virsh --connect $LIBVIRT_URI save $DEPLOY_ID $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"
|
||||
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
|
||||
XPATH_ELEMENTS[i++]="$element"
|
||||
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}"
|
||||
if [ -x "$SAVE_TM_FILE" ]; then
|
||||
echo "$DRV_MESSAGE" | $SAVE_TM_FILE $@
|
||||
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
|
||||
|
68
src/vmm_mad/remotes/kvm/save.ceph
Executable file
68
src/vmm_mad/remotes/kvm/save.ceph
Executable 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
|
Loading…
x
Reference in New Issue
Block a user