Merge "Enables end user to pick share protocol"

This commit is contained in:
Jenkins 2017-01-17 10:40:31 +00:00 committed by Gerrit Code Review
commit 66ed94bade
3 changed files with 185 additions and 106 deletions

View File

@ -7,8 +7,9 @@ Team and repository tags
.. 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.
@ -19,14 +20,40 @@ This repo is a place for Manila-related diskimage-builder elements.
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.
Before building image make sure all system dependencies,
listed in other-requirements.txt file, are installed.
After it, you should only need to run this command:
You should only need to run this command:
.. sourcecode:: bash
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
View File

@ -3,19 +3,10 @@
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:
# ---------------------
# Development options
DIB_UPDATE_REQUESTED=${DIB_UPDATE_REQUESTED:-true}
USE_OFFLINE_MODE=${USE_OFFLINE_MODE:-"yes"}
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_NAME=${MANILA_IMG_NAME:-"manila-service-image"}
# Manila features
MANILA_ENABLE_NFS_SUPPORT=${MANILA_ENABLE_NFS_SUPPORT:-"yes"}
MANILA_ENABLE_CIFS_SUPPORT=${MANILA_ENABLE_CIFS_SUPPORT:-"yes"}
# Manila image creation default
MANILA_SHARE_PROTO=${MANILA_SHARE_PROTO:-"nfs"}
# Manila Generic share driver replication feature requires ZFS:
MANILA_ENABLE_ZFS_SUPPORT=${MANILA_ENABLE_ZFS_SUPPORT:-"no"}
# Path to elements
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
# --------------------
@ -46,58 +96,34 @@ IMAGE_FORMAT="qcow2"
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
configure() {
OPTIONAL_ELEMENTS=
OPTIONAL_DIB_ARGS=
if [ "$MANILA_ENABLE_NFS_SUPPORT" = "yes" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
fi
if [ "$MANILA_SHARE_PROTO" = "nfs" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
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
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-cifs"
fi
if [ "$USE_OFFLINE_MODE" = "yes" ]; then
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -offline"
fi
if [ "$MANILA_ENABLE_ZFS_SUPPORT" = "yes" ]; then
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-zfs"
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 [ "$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 [ "$DISABLE_IMG_COMPRESSION" = "yes" ]; then
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -u"
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
@ -125,7 +151,7 @@ need_required_packages() {
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
;;
esac
@ -138,51 +164,77 @@ need_required_packages() {
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
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
;;
"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
"CentOS"*)
platform=centos
;;
*)
echo -e "Unknown platform '$platform' for installing packages.\nAborting"
err "Unknown value in /etc/system-release. Impossible to build images.\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
err "Unknown host OS. Impossible to build images.\nAborting"
exit 2
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
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} = "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
# -----------
disk-image-create \
-t $IMAGE_FORMAT \
-a $MANILA_IMG_ARCH \
$OPTIONAL_DIB_ARGS \
-o $MANILA_IMG_NAME \
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS
build_image() {
disk-image-create \
-t $IMAGE_FORMAT \
-a $MANILA_IMG_ARCH \
$OPTIONAL_DIB_ARGS \
-o $MANILA_IMG_NAME \
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS
}
main() {
parse_arguments "$@"
configure
verify_dependencies
build_image
exit 0
}
main "$@"

View File

@ -28,7 +28,7 @@ commands =
commands = {posargs}
[testenv:buildimage]
commands = manila-image-create
commands = manila-image-create {posargs}
deps =
-r{toxinidir}/requirements.txt