diff --git a/src/tm_mad/qcow2/snap_create b/src/tm_mad/qcow2/snap_create deleted file mode 120000 index 9c454e8cd4..0000000000 --- a/src/tm_mad/qcow2/snap_create +++ /dev/null @@ -1 +0,0 @@ -../common/not_supported.sh \ No newline at end of file diff --git a/src/tm_mad/qcow2/snap_create b/src/tm_mad/qcow2/snap_create new file mode 100755 index 0000000000..f91356d7d1 --- /dev/null +++ b/src/tm_mad/qcow2/snap_create @@ -0,0 +1,74 @@ +#!/bin/bash -x + +# -------------------------------------------------------------------------- # +# Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs # +# # +# 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. # +#--------------------------------------------------------------------------- # + +# snap_create host:parent_image snap_id vmid ds_id + +SRC=$1 +SNAP_ID=$2 +VMID=$3 +DSID=$4 + +if [ -z "${ONE_LOCATION}" ]; then + TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh + DATASTORES=/var/lib/one/datastores +else + TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh + DATASTORES=$ONE_LOCATION/var/datastores +fi + +. $TMCOMMON + +SRC_PATH=`arg_path $SRC` + +SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) + +DISK_ID=$(basename ${SRC} | cut -d. -f2) +DISK_PATH="${SYSTEM_DS_PATH}/disk.${DISK_ID}" +SNAP_DIR="${DISK_PATH}.snap" +SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" +SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) +CURRENT_PATH=${DISK_PATH} + +if [ ! -d ${SNAP_PATH} ]; then + mkdir ${SNAP_DIR} +fi + +# Move save current snapshot and create a new one. The snapshot uses +# absolute path name as the qemu-img has problems with relative backing +# file paths and symlinks +mv ${CURRENT_PATH} ${SNAP_PATH} +qemu-img create -f qcow2 -b ${SNAP_PATH} ${CURRENT_PATH} + +# TODO: Check that the new snapshot can be created. Roll back in case +# of error + +# Convert backing file absolute path to relative path so it works outside +# the system directory. Do not do this for snapshot one as: +# * It could be a non backed file (persistent) +# * The backing file is in images directory, is not relative +if [ "$SNAP_ID" != "0" ]; then + BACKING_FILE=$(qemu-img info ${SNAP_PATH} | grep '^backing file:' | \ + cut -d: -f2 | sed 's/^ //') + + if [ -n "$BACKING_FILE" ]; then + RELATIVE_BACKING_FILE=$(basename ${BACKING_FILE}) + + qemu-img rebase -u -b ${RELATIVE_BACKING_FILE} ${SNAP_PATH} + fi +fi + diff --git a/src/tm_mad/qcow2/snap_revert b/src/tm_mad/qcow2/snap_revert deleted file mode 120000 index 9c454e8cd4..0000000000 --- a/src/tm_mad/qcow2/snap_revert +++ /dev/null @@ -1 +0,0 @@ -../common/not_supported.sh \ No newline at end of file diff --git a/src/tm_mad/qcow2/snap_revert b/src/tm_mad/qcow2/snap_revert new file mode 100755 index 0000000000..38ac9ae954 --- /dev/null +++ b/src/tm_mad/qcow2/snap_revert @@ -0,0 +1,49 @@ +#!/bin/bash + +# -------------------------------------------------------------------------- # +# Copyright 2002-2015, OpenNebula Project (OpenNebula.org), C12G Labs # +# # +# 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. # +#--------------------------------------------------------------------------- # + +# snap_create host:parent_image snap_id vmid ds_id + +SRC=$1 +SNAP_ID=$2 +VMID=$3 +DSID=$4 + +if [ -z "${ONE_LOCATION}" ]; then + TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh + DATASTORES=/var/lib/one/datastores +else + TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh + DATASTORES=$ONE_LOCATION/var/datastores +fi + +. $TMCOMMON + +SRC_PATH=`arg_path $SRC` + +SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) + +DISK_ID=$(basename ${SRC} | cut -d. -f2) +DISK_PATH="${SYSTEM_DS_PATH}/disk.${DISK_ID}" +SNAP_DIR="${DISK_PATH}.snap" +SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" +SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) +CURRENT_PATH=${DISK_PATH} + +rm ${CURRENT_PATH} +qemu-img create -f qcow2 -b ${SNAP_PATH} ${CURRENT_PATH} +