diff --git a/install.sh b/install.sh index 4eb1699ef2..935c724f0c 100755 --- a/install.sh +++ b/install.sh @@ -282,6 +282,7 @@ VAR_DIRS="$VAR_LOCATION/remotes \ $VAR_LOCATION/remotes/tm/ \ $VAR_LOCATION/remotes/tm/dummy \ $VAR_LOCATION/remotes/tm/shared \ + $VAR_LOCATION/remotes/tm/shared_lvm \ $VAR_LOCATION/remotes/tm/qcow2 \ $VAR_LOCATION/remotes/tm/ssh \ $VAR_LOCATION/remotes/tm/vmfs \ @@ -464,6 +465,7 @@ INSTALL_FILES=( VMM_EXEC_VMWARE_SCRIPTS:$VAR_LOCATION/remotes/vmm/vmware TM_FILES:$VAR_LOCATION/remotes/tm TM_SHARED_FILES:$VAR_LOCATION/remotes/tm/shared + TM_SHARED_LVM_FILES:$VAR_LOCATION/remotes/tm/shared_lvm TM_QCOW2_FILES:$VAR_LOCATION/remotes/tm/qcow2 TM_SSH_FILES:$VAR_LOCATION/remotes/tm/ssh TM_VMFS_FILES:$VAR_LOCATION/remotes/tm/vmfs @@ -945,6 +947,7 @@ NETWORK_VMWARE_FILES="src/vnm_mad/remotes/vmware/clean \ #------------------------------------------------------------------------------- # Transfer Manager commands, to be installed under $LIB_LOCATION/tm_commands # - SHARED TM, $VAR_LOCATION/tm/shared +# - SHARED_LVM TM, $VAR_LOCATION/tm/shared_lvm # - QCOW2 TM, $VAR_LOCATION/tm/qcow2 # - SSH TM, $VAR_LOCATION/tm/ssh # - DUMMY TM, $VAR_LOCATION/tm/dummy @@ -968,6 +971,15 @@ TM_SHARED_FILES="src/tm_mad/shared/clone \ src/tm_mad/shared/mvds \ src/tm_mad/shared/cpds" +TM_SHARED_LVM_FILES="src/tm_mad/shared_lvm/clone \ + src/tm_mad/shared_lvm/ln \ + src/tm_mad/shared_lvm/mv \ + src/tm_mad/shared_lvm/mvds \ + src/tm_mad/shared_lvm/cpds \ + src/tm_mad/shared_lvm/premigrate \ + src/tm_mad/shared_lvm/postmigrate \ + src/tm_mad/shared_lvm/delete" + TM_QCOW2_FILES="src/tm_mad/qcow2/clone \ src/tm_mad/qcow2/delete \ src/tm_mad/qcow2/ln \ diff --git a/share/etc/oned.conf b/share/etc/oned.conf index dd85ebad8a..1f9fc55f21 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -356,7 +356,8 @@ VM_MAD = [ TM_MAD = [ executable = "one_tm", - arguments = "-t 15 -d dummy,lvm,shared,qcow2,ssh,vmfs,iscsi,ceph" ] + arguments = "-t 15 -d dummy,lvm,shared,shared_lvm,qcow2,ssh,vmfs,iscsi,ceph" +] #******************************************************************************* # Datastore Driver Configuration diff --git a/src/tm_mad/shared_lvm/clone b/src/tm_mad/shared_lvm/clone new file mode 100755 index 0000000000..07dd1062ac --- /dev/null +++ b/src/tm_mad/shared_lvm/clone @@ -0,0 +1,83 @@ +#!/bin/bash + +# -------------------------------------------------------------------------- # +# Copyright 2002-2013, 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. # +#--------------------------------------------------------------------------- # + +# clone fe:SOURCE host:remote_system_ds/disk.i size +# - fe is the front-end hostname +# - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk +# - host is the target host to deploy the VM +# - remote_system_ds is the path for the system datastore in the host + +SRC=$1 +DST=$2 +VM_ID=$3 +DS_ID=$4 + +if [ -z "${ONE_LOCATION}" ]; then + TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh +else + TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh +fi + +DRIVER_PATH=$(dirname $0) + +source $TMCOMMON +source ${DRIVER_PATH}/../../datastore/libfs.sh + +#------------------------------------------------------------------------------- +# Set dst path and dir +#------------------------------------------------------------------------------- + +SRC_HOST=`arg_host $SRC` +SRC_PATH=`arg_path $SRC` + +DST_PATH=`arg_path $DST` +DST_HOST=`arg_host $DST` +DST_DIR=`dirname $DST_PATH` + +DS_SYS_ID=$(echo $DST_DIR | $AWK -F '/' '{print $(NF-1)}') + +SIZE=`file_size $SRC_PATH` + +if [ "$SIZE" = "0" ]; then + log_error "Cannot determine size for $SRC_PATH" + exit -1 +fi + +DISK_ID=$(echo $DST_PATH | $AWK -F. '{print $NF}') + +LV_NAME="lv-one-$VM_ID-$DISK_ID" +VG_NAME="vg-one-$DS_SYS_ID" +DEV="/dev/${VG_NAME}/${LV_NAME}" + +#------------------------------------------------------------------------------- +# Create the snapshot and link it +#------------------------------------------------------------------------------- + +CLONE_CMD=$(cat < +# - host is the target host to deploy the VM +# - remote_system_ds is the path for the system datastore in the host + +DST=$1 +VM_ID=$2 +DS_ID=$3 + +if [ -z "${ONE_LOCATION}" ]; then + TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh +else + TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh +fi + +source $TMCOMMON + +#------------------------------------------------------------------------------- +# Return if deleting a disk, we will delete them when removing the +# remote_system_ds directory for the VM (remotely) +#------------------------------------------------------------------------------- +DST_PATH=`arg_path $DST` +DST_HOST=`arg_host $DST` + +# Delete the device if it's a clone (LVM snapshot) +DELETE_CMD=$(cat <