manila-image-elements/bin/manila-image-create
vponomaryov 572cef52e2 Add ZFS element
ZFS filesystem is going to be used for replication feature by
Manila Generic share driver.
So, add appropriate Manila image element as optional and enabled by default.

Set env var 'MANILA_ENABLE_ZFS_SUPPORT' to any value other than 'yes' to
disable its installation.

Change-Id: If58186dc03d43430c1225e77aa80a1f85a62dd1b
Closes-Bug: #1538658
2016-01-27 19:06:57 +02:00

189 lines
5.6 KiB
Bash

#!/bin/bash
set -eu
set -o pipefail
SCRIPT_HOME=$(dirname $(readlink -f $0))
if [ -d $SCRIPT_HOME/../share/manila-elements ]; then
_PREFIX=$SCRIPT_HOME/../share/manila-elements
elif [ -d $SCRIPT_HOME/../../../elements ]; then
_PREFIX=$SCRIPT_HOME/../../..
else
_PREFIX=$SCRIPT_HOME/..
fi
export ELEMENTS_PATH=$_PREFIX/elements
# Collect configuration
# --------------------
# Development options:
DIB_UPDATE_REQUESTED=${DIB_UPDATE_REQUESTED:-true}
USE_OFFLINE_MODE=${USE_OFFLINE_MODE:-"yes"}
ENABLE_DEBUG_MODE=${ENABLE_DEBUG_MODE:-"no"}
DISABLE_IMG_COMPRESSION=${DISABLE_IMG_COMPRESSION:-"no"}
# Manila user settings
MANILA_USER=${MANILA_USER:-"manila"}
MANILA_PASSWORD=${MANILA_PASSWORD:-"manila"}
MANILA_USER_AUTHORIZED_KEYS="None"
# Manila image settings
MANILA_IMG_ARCH=${MANILA_IMG_ARCH:-"i386"}
MANILA_IMG_OS=${MANILA_IMG_OS:-"manila-ubuntu-core"}
MANILA_IMG_OS_VER=${MANILA_IMG_OS_VER:-"trusty"}
MANILA_IMG_NAME=${MANILA_IMG_NAME:-"manila-service-image.qcow2"}
# Manila features
MANILA_ENABLE_NFS_SUPPORT=${MANILA_ENABLE_NFS_SUPPORT:-"yes"}
MANILA_ENABLE_CIFS_SUPPORT=${MANILA_ENABLE_CIFS_SUPPORT:-"yes"}
# Manila Generic share driver replication feature requires ZFS:
MANILA_ENABLE_ZFS_SUPPORT=${MANILA_ENABLE_ZFS_SUPPORT:-"yes"}
# Verify configuration
# --------------------
REQUIRED_ELEMENTS="manila-ssh vm $MANILA_IMG_OS dhcp-all-interfaces cleanup-kernel-initrd"
OPTIONAL_ELEMENTS=
OPTIONAL_DIB_ARGS=
if [ "$MANILA_ENABLE_CIFS_SUPPORT" != "yes" ] && [ "$MANILA_ENABLE_NFS_SUPPORT" != "yes" ]; then
echo "You should enable NFS or CIFS support for manila image."
fi
if [ "$MANILA_ENABLE_NFS_SUPPORT" = "yes" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
fi
if [ "$MANILA_ENABLE_CIFS_SUPPORT" = "yes" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-cifs"
fi
if [ "$MANILA_ENABLE_ZFS_SUPPORT" = "yes" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-zfs"
fi
if [ "$USE_OFFLINE_MODE" = "yes" ]; then
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -offline"
fi
if [ "$ENABLE_DEBUG_MODE" = "yes" ]; then
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -x"
MANILA_USER_AUTHORIZED_KEYS=${MANILA_USER_AUTHORIZED_KEYS:-"$HOME/.ssh/id_rsa.pub"}
fi
if [ "$DISABLE_IMG_COMPRESSION" = "yes" ]; then
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -u"
fi
if [ "$MANILA_IMG_OS" = "manila-ubuntu-core" ] && [ "$MANILA_IMG_OS_VER" != "trusty" ]; then
echo "manila-ubuntu-core doesn't support '$MANILA_IMG_OS_VER' release."
echo "Change MANILA_IMG_OS to 'ubuntu' if you need another release."
fi
# Verify dependencies
# -------------------
if [ -e /etc/os-release ]; then
platform=$(cat /etc/os-release | awk -F= '/^ID=/ {print tolower($2);}')
# remove eventual quotes around ID=...
platform=$(echo $platform | sed -e 's,^",,;s,"$,,')
elif [ -e /etc/system-release ]; then
case "$(head -1 /etc/system-release)" in
"Red Hat Enterprise Linux Server"*)
platform=rhel
;;
"CentOS"*)
platform=centos
;;
*)
echo -e "Unknown value in /etc/system-release. Impossible to build images.\nAborting"
exit 2
;;
esac
else
echo -e "Unknown host OS. Impossible to build images.\nAborting"
exit 2
fi
is_installed() {
if [ "$platform" = 'ubuntu' ]; then
dpkg -s "$1" &> /dev/null
else
# centos, fedora, opensuse, or rhel
if ! rpm -q "$1" &> /dev/null; then
rpm -q "$(rpm -q --whatprovides "$1")"
fi
fi
}
need_required_packages() {
case "$platform" in
"ubuntu")
package_list="qemu kpartx"
;;
"fedora")
package_list="qemu-img kpartx"
;;
"opensuse")
package_list="qemu kpartx"
;;
"rhel" | "centos")
package_list="qemu-kvm qemu-img kpartx"
;;
*)
echo -e "Unknown platform '$platform' for the package list.\nAborting"
exit 2
;;
esac
for p in `echo $package_list`; do
if ! is_installed $p; then
return 0
fi
done
return 1
}
if need_required_packages; then
# install required packages if requested
if [ -n "$DIB_UPDATE_REQUESTED" ]; then
case "$platform" in
"ubuntu")
sudo apt-get update
sudo apt-get install $package_list -y
;;
"opensuse")
sudo zypper --non-interactive --gpg-auto-import-keys in $package_list
;;
"fedora" | "rhel" | "centos")
if [ ${platform} = "centos" ]; then
# install EPEL repo, in order to install argparse
sudo rpm -Uvh --force http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
fi
sudo yum install $package_list -y
;;
*)
echo -e "Unknown platform '$platform' for installing packages.\nAborting"
exit 2
;;
esac
else
echo "Missing one of the following packages: $package_list"
echo "Please install manually or rerun with the update option (-u)."
exit 1
fi
fi
# Export diskimage-builder settings
# ---------------------------------
export DIB_DEFAULT_INSTALLTYPE=package
export DIB_RELEASE=$MANILA_IMG_OS_VER
# User settings
export DIB_MANILA_USER_USERNAME=$MANILA_USER
export DIB_MANILA_USER_PASSWORD=$MANILA_PASSWORD
export DIB_MANILA_USER_AUTHORIZED_KEYS=$MANILA_USER_AUTHORIZED_KEYS
# Build image
# -----------
disk-image-create -a $MANILA_IMG_ARCH $OPTIONAL_DIB_ARGS -o $MANILA_IMG_NAME\
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS