Enables end user to pick share protocol
This patch set refactors manila-image-create script to allow end users to pick which share protocol install on their images. This change slightly affects the current behavior of the script. If an image is created using tox -e buildimage (as stated by current docs) an Ubuntu Trusty Minimal image with NFS will be created. Now, calling manila-image-create with params, will generate an image with the filesystem protocol desired. Change-Id: I0419cbf9a39290d32409f7a5ab9dfaf5ca636bb7 Closes-Bug: #1643034
This commit is contained in:
parent
bd607f1968
commit
ac84122598
39
README.rst
39
README.rst
@ -7,8 +7,9 @@ Team and repository tags
|
|||||||
|
|
||||||
.. Change things from this point on
|
.. Change things from this point on
|
||||||
|
|
||||||
Manila image elements project
|
=============================
|
||||||
==============================
|
Manila Image Elements Project
|
||||||
|
=============================
|
||||||
|
|
||||||
This repo is a place for Manila-related diskimage-builder elements.
|
This repo is a place for Manila-related diskimage-builder elements.
|
||||||
|
|
||||||
@ -19,14 +20,40 @@ This repo is a place for Manila-related diskimage-builder elements.
|
|||||||
|
|
||||||
|
|
||||||
Build instructions
|
Build instructions
|
||||||
------------------
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Before building the image, make sure all system dependencies
|
||||||
|
listed in bindep.txt file, are installed.
|
||||||
|
|
||||||
|
Default generic using tox
|
||||||
|
-------------------------
|
||||||
|
|
||||||
Script for creating Ubuntu based image with our elements and default parameters.
|
Script for creating Ubuntu based image with our elements and default parameters.
|
||||||
|
|
||||||
Before building image make sure all system dependencies,
|
You should only need to run this command:
|
||||||
listed in other-requirements.txt file, are installed.
|
|
||||||
After it, you should only need to run this command:
|
|
||||||
|
|
||||||
.. sourcecode:: bash
|
.. sourcecode:: bash
|
||||||
|
|
||||||
tox -e buildimage
|
tox -e buildimage
|
||||||
|
|
||||||
|
On completion, an Ubuntu minimal image with NFS will be available for use.
|
||||||
|
|
||||||
|
Non-default image using tox
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
A finer-grained image creation control can be obtained by specifying extra parameters.
|
||||||
|
Precisely, the syntax is as follows:
|
||||||
|
|
||||||
|
.. sourcecode:: bash
|
||||||
|
|
||||||
|
tox -e buildimage -- -s nfs
|
||||||
|
|
||||||
|
Where <share-protocol> can be nfs, cifs or zfs.
|
||||||
|
|
||||||
|
For example, running:
|
||||||
|
|
||||||
|
.. sourcecode:: bash
|
||||||
|
|
||||||
|
tox -e buildimage -- -s cifs
|
||||||
|
|
||||||
|
Will generate an Ubuntu based image with CIFS.
|
||||||
|
250
bin/manila-image-create
Normal file → Executable file
250
bin/manila-image-create
Normal file → Executable file
@ -3,19 +3,10 @@
|
|||||||
set -eu
|
set -eu
|
||||||
set -o pipefail
|
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
|
# Collect configuration
|
||||||
# --------------------
|
# ---------------------
|
||||||
# Development options:
|
|
||||||
|
# Development options
|
||||||
DIB_UPDATE_REQUESTED=${DIB_UPDATE_REQUESTED:-true}
|
DIB_UPDATE_REQUESTED=${DIB_UPDATE_REQUESTED:-true}
|
||||||
USE_OFFLINE_MODE=${USE_OFFLINE_MODE:-"yes"}
|
USE_OFFLINE_MODE=${USE_OFFLINE_MODE:-"yes"}
|
||||||
ENABLE_DEBUG_MODE=${ENABLE_DEBUG_MODE:-"no"}
|
ENABLE_DEBUG_MODE=${ENABLE_DEBUG_MODE:-"no"}
|
||||||
@ -32,12 +23,71 @@ MANILA_IMG_OS=${MANILA_IMG_OS:-"manila-ubuntu-minimal"}
|
|||||||
MANILA_IMG_OS_VER=${MANILA_IMG_OS_VER:-"trusty"}
|
MANILA_IMG_OS_VER=${MANILA_IMG_OS_VER:-"trusty"}
|
||||||
MANILA_IMG_NAME=${MANILA_IMG_NAME:-"manila-service-image"}
|
MANILA_IMG_NAME=${MANILA_IMG_NAME:-"manila-service-image"}
|
||||||
|
|
||||||
# Manila features
|
# Manila image creation default
|
||||||
MANILA_ENABLE_NFS_SUPPORT=${MANILA_ENABLE_NFS_SUPPORT:-"yes"}
|
MANILA_SHARE_PROTO=${MANILA_SHARE_PROTO:-"nfs"}
|
||||||
MANILA_ENABLE_CIFS_SUPPORT=${MANILA_ENABLE_CIFS_SUPPORT:-"yes"}
|
|
||||||
|
|
||||||
# Manila Generic share driver replication feature requires ZFS:
|
# Path to elements
|
||||||
MANILA_ENABLE_ZFS_SUPPORT=${MANILA_ENABLE_ZFS_SUPPORT:-"no"}
|
SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# diskimage-builder general settings
|
||||||
|
export DIB_DEFAULT_INSTALLTYPE=package
|
||||||
|
export DIB_RELEASE=$MANILA_IMG_OS_VER
|
||||||
|
|
||||||
|
# diskimage-builder 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
|
||||||
|
|
||||||
|
# CLI
|
||||||
|
# ---
|
||||||
|
err() {
|
||||||
|
echo -e "${0##*/}: $@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
print_usage() {
|
||||||
|
echo "Usage: ${0##*/} [-s share-proto] [-h]"
|
||||||
|
echo "Options:"
|
||||||
|
echo " -s | --share-proto: name of the share protocol. Possible options are nfs, cifs or zfs"
|
||||||
|
echo " -h | --help: print this usage message and exit"
|
||||||
|
echo ""
|
||||||
|
echo "Usage example: manila_image_elements -s nfs"
|
||||||
|
}
|
||||||
|
|
||||||
|
valid_share_protocol(){
|
||||||
|
if [ "${MANILA_SHARE_PROTO}" != "nfs" ] && [ "${MANILA_SHARE_PROTO}" != "cifs" ] && [ "${MANILA_SHARE_PROTO}" != "zfs" ]; then
|
||||||
|
err "Protocol ${MANILA_SHARE_PROTO} not supported. Valid options are nfs, cifs or zfs."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_arguments() {
|
||||||
|
while [[ $# > 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-s|--share)
|
||||||
|
export MANILA_SHARE_PROTO=$2
|
||||||
|
valid_share_protocol
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
print_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
err "Error: Unknown option: $1."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Verify configuration
|
# Verify configuration
|
||||||
# --------------------
|
# --------------------
|
||||||
@ -46,58 +96,34 @@ IMAGE_FORMAT="qcow2"
|
|||||||
OPTIONAL_ELEMENTS=
|
OPTIONAL_ELEMENTS=
|
||||||
OPTIONAL_DIB_ARGS=
|
OPTIONAL_DIB_ARGS=
|
||||||
|
|
||||||
if [ "$MANILA_ENABLE_CIFS_SUPPORT" != "yes" ] && [ "$MANILA_ENABLE_NFS_SUPPORT" != "yes" ]; then
|
configure() {
|
||||||
echo "You should enable NFS or CIFS support for manila image."
|
OPTIONAL_ELEMENTS=
|
||||||
fi
|
OPTIONAL_DIB_ARGS=
|
||||||
|
|
||||||
if [ "$MANILA_ENABLE_NFS_SUPPORT" = "yes" ]; then
|
if [ "$MANILA_SHARE_PROTO" = "nfs" ]; then
|
||||||
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
|
||||||
fi
|
elif [ "$MANILA_SHARE_PROTO" = "cifs" ]; then
|
||||||
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-cifs"
|
||||||
|
elif [ "$MANILA_SHARE_PROTO" = "zfs" ]; then
|
||||||
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-zfs"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$MANILA_ENABLE_CIFS_SUPPORT" = "yes" ]; then
|
if [ "$USE_OFFLINE_MODE" = "yes" ]; then
|
||||||
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-cifs"
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -offline"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$MANILA_ENABLE_ZFS_SUPPORT" = "yes" ]; then
|
if [ "$ENABLE_DEBUG_MODE" = "yes" ]; then
|
||||||
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-zfs"
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -x"
|
||||||
fi
|
MANILA_USER_AUTHORIZED_KEYS=${MANILA_USER_AUTHORIZED_KEYS:-"$HOME/.ssh/id_rsa.pub"}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$USE_OFFLINE_MODE" = "yes" ]; then
|
if [ "$DISABLE_IMG_COMPRESSION" = "yes" ]; then
|
||||||
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -offline"
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -u"
|
||||||
fi
|
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
|
|
||||||
|
|
||||||
# Verify dependencies
|
# 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() {
|
is_installed() {
|
||||||
if [ "$platform" = 'ubuntu' ]; then
|
if [ "$platform" = 'ubuntu' ]; then
|
||||||
@ -125,7 +151,7 @@ need_required_packages() {
|
|||||||
package_list="qemu-kvm qemu-img kpartx"
|
package_list="qemu-kvm qemu-img kpartx"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "Unknown platform '$platform' for the package list.\nAborting"
|
err "Unknown platform '$platform' for the package list.\nAborting"
|
||||||
exit 2
|
exit 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -138,51 +164,77 @@ need_required_packages() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if need_required_packages; then
|
verify_dependencies() {
|
||||||
# install required packages if requested
|
if [ -e /etc/os-release ]; then
|
||||||
if [ -n "$DIB_UPDATE_REQUESTED" ]; then
|
platform=$(cat /etc/os-release | awk -F= '/^ID=/ {print tolower($2);}')
|
||||||
case "$platform" in
|
# remove eventual quotes around ID=...
|
||||||
"ubuntu")
|
platform=$(echo $platform | sed -e 's,^",,;s,"$,,')
|
||||||
sudo apt-get update
|
elif [ -e /etc/system-release ]; then
|
||||||
sudo apt-get install $package_list -y
|
case "$(head -1 /etc/system-release)" in
|
||||||
|
"Red Hat Enterprise Linux Server"*)
|
||||||
|
platform=rhel
|
||||||
;;
|
;;
|
||||||
"opensuse")
|
"CentOS"*)
|
||||||
sudo zypper --non-interactive --gpg-auto-import-keys in $package_list
|
platform=centos
|
||||||
;;
|
|
||||||
"fedora" | "rhel" | "centos")
|
|
||||||
if [ ${platform} = "fedora" ]; then
|
|
||||||
sudo dnf install $package_list -y
|
|
||||||
else
|
|
||||||
sudo yum install $package_list -y
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e "Unknown platform '$platform' for installing packages.\nAborting"
|
err "Unknown value in /etc/system-release. Impossible to build images.\nAborting"
|
||||||
exit 2
|
exit 2
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
echo "Missing one of the following packages: $package_list"
|
err "Unknown host OS. Impossible to build images.\nAborting"
|
||||||
echo "Please install manually or rerun with the update option (-u)."
|
exit 2
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# Export diskimage-builder settings
|
if need_required_packages; then
|
||||||
# ---------------------------------
|
# install required packages if requested
|
||||||
export DIB_DEFAULT_INSTALLTYPE=package
|
if [ -n "$DIB_UPDATE_REQUESTED" ]; then
|
||||||
export DIB_RELEASE=$MANILA_IMG_OS_VER
|
case "$platform" in
|
||||||
|
"ubuntu")
|
||||||
# User settings
|
sudo apt-get update
|
||||||
export DIB_MANILA_USER_USERNAME=$MANILA_USER
|
sudo apt-get install $package_list -y
|
||||||
export DIB_MANILA_USER_PASSWORD=$MANILA_PASSWORD
|
;;
|
||||||
export DIB_MANILA_USER_AUTHORIZED_KEYS=$MANILA_USER_AUTHORIZED_KEYS
|
"opensuse")
|
||||||
|
sudo zypper --non-interactive --gpg-auto-import-keys in $package_list
|
||||||
|
;;
|
||||||
|
"fedora" | "rhel" | "centos")
|
||||||
|
if [ ${platform} = "fedora" ]; then
|
||||||
|
sudo dnf install $package_list -y
|
||||||
|
else
|
||||||
|
sudo yum install $package_list -y
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
err "Unknown platform '$platform' for installing packages.\nAborting"
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
err "Missing one of the following packages: $package_list"
|
||||||
|
err "Please install manually or rerun with the update option (-u)."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Build image
|
# Build image
|
||||||
# -----------
|
# -----------
|
||||||
disk-image-create \
|
build_image() {
|
||||||
-t $IMAGE_FORMAT \
|
disk-image-create \
|
||||||
-a $MANILA_IMG_ARCH \
|
-t $IMAGE_FORMAT \
|
||||||
$OPTIONAL_DIB_ARGS \
|
-a $MANILA_IMG_ARCH \
|
||||||
-o $MANILA_IMG_NAME \
|
$OPTIONAL_DIB_ARGS \
|
||||||
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS
|
-o $MANILA_IMG_NAME \
|
||||||
|
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
parse_arguments "$@"
|
||||||
|
configure
|
||||||
|
verify_dependencies
|
||||||
|
build_image
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
|
Loading…
Reference in New Issue
Block a user