1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-20 10:50:08 +03:00

F : Create volatiled disks as LV for fs_lvm

This commit is contained in:
Jan Orel 2019-02-05 15:25:07 +01:00 committed by Ruben S. Montero
parent d9fc1fffce
commit 5c711d8ba7

@ -1 +0,0 @@
../shared/mkimage

97
src/tm_mad/fs_lvm/mkimage Executable file

@ -0,0 +1,97 @@
#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2019, 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. #
#--------------------------------------------------------------------------- #
# mkimage size format host:remote_system_ds/disk.i vmid dsid
# - size in MB of the image
# - format for the image
# - remote_system_ds is the path for the system datastore in the host
# - vmid is the id of the VM
# - dsid is the target datastore (0 is the system datastore)
SIZE=$1
FSTYPE=$2
DST=$3
VM_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
source ${DRIVER_PATH}/../../etc/tm/fs_lvm/fs_lvm.conf
#-------------------------------------------------------------------------------
# Set dst path and dir
#-------------------------------------------------------------------------------
DST_PATH=`arg_path $DST`
DST_HOST=`arg_host $DST`
DST_DIR=`dirname $DST_PATH`
DS_SYS_ID=$(basename $(dirname $DST_DIR))
DST_DS_PATH="$(dirname $(dirname $(dirname $DST_PATH)))"
DISK_ID=$(basename ${DST_PATH} | cut -d. -f2)
#-------------------------------------------------------------------------------
# Create the logical volume and link it
#-------------------------------------------------------------------------------
LV_NAME="lv-one-$VM_ID-$DISK_ID"
VG_NAME="vg-one-$DS_SYS_ID"
DEV="/dev/${VG_NAME}/${LV_NAME}"
# Execute lvcreate with a lock in the frontend
CREATE_CMD=$(cat <<EOF
set -e -o pipefail
$SUDO $SYNC
$SUDO $LVSCAN
$SUDO $LVCREATE --wipesignatures n -L${SIZE}M -n $LV_NAME $VG_NAME
EOF
)
LOCK="tm-fs_lvm-${DS_SYS_ID}.lock"
exclusive "${LOCK}" 120 ssh_exec_and_log "$DST_HOST" "$CREATE_CMD" \
"Error creating LV named $LV_NAME"
MKIMAGE_CMD=$(cat <<EOF
set -e -o pipefail
mkdir -p $DST_DIR
hostname -f >"${DST_DIR}/.host" || :
# zero the volume
if [ "${ZERO_LVM_ON_CREATE}" = "yes" ]; then
${DD} if=/dev/zero of="${DEV}" bs=64k || :
fi
[ "$FSTYPE" = "swap" ] && mkswap ${DEV}
rm -f "$DST_PATH"
ln -s "$DEV" "$DST_PATH"
EOF
)
ssh_exec_and_log "$DST_HOST" "$MKIMAGE_CMD" \
"Could not create image $DST_PATH"
exit 0