|  | #!/bin/bash | 
|  | # | 
|  | # lib/dib | 
|  | # Install and build images with **diskimage-builder** | 
|  |  | 
|  | # Dependencies: | 
|  | # | 
|  | # - functions | 
|  | # - DEST, DATA_DIR must be defined | 
|  |  | 
|  | # stack.sh | 
|  | # --------- | 
|  | # - install_dib | 
|  |  | 
|  | # Save trace setting | 
|  | XTRACE=$(set +o | grep xtrace) | 
|  | set +o xtrace | 
|  |  | 
|  | # Defaults | 
|  | # -------- | 
|  |  | 
|  | # set up default directories | 
|  | DIB_DIR=$DEST/diskimage-builder | 
|  | TIE_DIR=$DEST/tripleo-image-elements | 
|  |  | 
|  | # NOTE: Setting DIB_APT_SOURCES assumes you will be building | 
|  | # Debian/Ubuntu based images. Leave unset for other flavors. | 
|  | DIB_APT_SOURCES=${DIB_APT_SOURCES:-""} | 
|  | DIB_BUILD_OFFLINE=$(trueorfalse False DIB_BUILD_OFFLINE) | 
|  | DIB_IMAGE_CACHE=$DATA_DIR/diskimage-builder/image-create | 
|  | DIB_PIP_REPO=$DATA_DIR/diskimage-builder/pip-repo | 
|  | DIB_PIP_REPO_PORT=${DIB_PIP_REPO_PORT:-8899} | 
|  |  | 
|  | OCC_DIR=$DEST/os-collect-config | 
|  | ORC_DIR=$DEST/os-refresh-config | 
|  | OAC_DIR=$DEST/os-apply-config | 
|  |  | 
|  | # Include the apt-sources element in builds if we have an | 
|  | # alternative sources.list specified. | 
|  | if [ -n "$DIB_APT_SOURCES" ]; then | 
|  | if [ ! -e "$DIB_APT_SOURCES" ]; then | 
|  | die $LINENO "DIB_APT_SOURCES set but not found at $DIB_APT_SOURCES" | 
|  | fi | 
|  | EXTRA_ELEMENTS="apt-sources" | 
|  | fi | 
|  |  | 
|  | # Functions | 
|  | # --------- | 
|  |  | 
|  | # install_dib() - Collect source and prepare | 
|  | function install_dib { | 
|  | pip_install diskimage-builder | 
|  |  | 
|  | git_clone $TIE_REPO $TIE_DIR $TIE_BRANCH | 
|  | git_clone $OCC_REPO $OCC_DIR $OCC_BRANCH | 
|  | git_clone $ORC_REPO $ORC_DIR $ORC_BRANCH | 
|  | git_clone $OAC_REPO $OAC_DIR $OAC_BRANCH | 
|  | mkdir -p $DIB_IMAGE_CACHE | 
|  | } | 
|  |  | 
|  | # build_dib_pip_repo() - Builds a local pip repo from local projects | 
|  | function build_dib_pip_repo { | 
|  | local project_dirs=$1 | 
|  | local projpath proj package | 
|  |  | 
|  | rm -rf $DIB_PIP_REPO | 
|  | mkdir -p $DIB_PIP_REPO | 
|  |  | 
|  | echo "<html><body>" > $DIB_PIP_REPO/index.html | 
|  | for projpath in $project_dirs; do | 
|  | proj=$(basename $projpath) | 
|  | mkdir -p $DIB_PIP_REPO/$proj | 
|  | pushd $projpath | 
|  | rm -rf dist | 
|  | python setup.py sdist | 
|  | pushd dist | 
|  | package=$(ls *) | 
|  | mv $package $DIB_PIP_REPO/$proj/$package | 
|  | popd | 
|  |  | 
|  | echo "<html><body><a href=\"$package\">$package</a></body></html>" > $DIB_PIP_REPO/$proj/index.html | 
|  | echo "<a href=\"$proj\">$proj</a><br/>" >> $DIB_PIP_REPO/index.html | 
|  |  | 
|  | popd | 
|  | done | 
|  |  | 
|  | echo "</body></html>" >> $DIB_PIP_REPO/index.html | 
|  |  | 
|  | local dib_pip_repo_apache_conf=$(apache_site_config_for dib_pip_repo) | 
|  |  | 
|  | sudo cp $FILES/apache-dib-pip-repo.template $dib_pip_repo_apache_conf | 
|  | sudo sed -e " | 
|  | s|%DIB_PIP_REPO%|$DIB_PIP_REPO|g; | 
|  | s|%DIB_PIP_REPO_PORT%|$DIB_PIP_REPO_PORT|g; | 
|  | s|%APACHE_NAME%|$APACHE_NAME|g; | 
|  | " -i $dib_pip_repo_apache_conf | 
|  | enable_apache_site dib_pip_repo | 
|  | } | 
|  |  | 
|  | # disk_image_create_upload() - Creates and uploads a diskimage-builder built image | 
|  | function disk_image_create_upload { | 
|  |  | 
|  | local image_name=$1 | 
|  | local image_elements=$2 | 
|  | local elements_path=$3 | 
|  |  | 
|  | local image_path=$TOP_DIR/files/$image_name.qcow2 | 
|  |  | 
|  | # Set the local pip repo as the primary index mirror so the | 
|  | # image is built with local packages | 
|  | local pypi_mirror_url=http://$SERVICE_HOST:$DIB_PIP_REPO_PORT/ | 
|  | local pypi_mirror_url_1 | 
|  |  | 
|  | if [ -a $HOME/.pip/pip.conf ]; then | 
|  | # Add the current pip.conf index-url as an extra-index-url | 
|  | # in the image build | 
|  | pypi_mirror_url_1=$(iniget $HOME/.pip/pip.conf global index-url) | 
|  | else | 
|  | # If no pip.conf, set upstream pypi as an extra mirror | 
|  | # (this also sets the .pydistutils.cfg index-url) | 
|  | pypi_mirror_url_1=http://pypi.python.org/simple | 
|  | fi | 
|  |  | 
|  | # The disk-image-create command to run | 
|  | ELEMENTS_PATH=$elements_path \ | 
|  | DIB_APT_SOURCES=$DIB_APT_SOURCES \ | 
|  | DIB_OFFLINE=$DIB_BUILD_OFFLINE \ | 
|  | PYPI_MIRROR_URL=$pypi_mirror_url \ | 
|  | PYPI_MIRROR_URL_1=$pypi_mirror_url_1 \ | 
|  | disk-image-create -a amd64 $image_elements $EXTRA_ELEMENTS \ | 
|  | --image-cache $DIB_IMAGE_CACHE \ | 
|  | -o $image_path | 
|  |  | 
|  | local token=$(keystone token-get | grep ' id ' | get_field 2) | 
|  | die_if_not_set $LINENO token "Keystone fail to get token" | 
|  |  | 
|  | glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT \ | 
|  | image-create --name $image_name --is-public True \ | 
|  | --container-format=bare --disk-format qcow2 \ | 
|  | < $image_path | 
|  | } | 
|  |  | 
|  | # Restore xtrace | 
|  | $XTRACE | 
|  |  | 
|  | # Tell emacs to use shell-script-mode | 
|  | ## Local variables: | 
|  | ## mode: shell-script | 
|  | ## End: |