summaryrefslogtreecommitdiffstats
path: root/docker/healthcheck/hooks
AgeCommit message (Collapse)AuthorFilesLines
2017-10-02Add ${DOCKER_TAG} in Docker hooksCédric Ollivier1-1/+1
It eases creating Docker images based on branches or tags. Change-Id: Id84513c53cad72a1fcd0debf06579481609b8bc2 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
2017-08-03Switch to Docker post_checkout hooksCédric Ollivier2-7/+6
Automated builds work when Dockerfile is modified after checkout. Otherwise they are not triggered [1]. [1] https://github.com/docker/hub-feedback/issues/518 Change-Id: I6ba9e06f9e62011d2f1c1788f2647b1175842ef3 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
2017-07-17Add script to build all containersCédric Ollivier1-0/+7
It also sets opnfv as default repository as they will be pushed by releng. It adds hooks asked for automated build via Docker which allows continuous integration before the update of jjobs. Change-Id: I08b55b1ff334afe6c0f58af3100cfa04f76d8ef0 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
='n156' href='#n156'>156 157 158 159 160 161 162
#!/bin/bash

##############################################################################
# Copyright (c) 2015 Ericsson AB and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

# yardstick-img-dpdk-modify - download and modify a Ubuntu cloud image
#
# The actual customization is done by a script passed with an absolute path as
# the only single argument. The command needs to be invoked as sudo
#
# Example invocation:
# yardstick-img-dpdk-modify /home/yardstick/tools/ubuntu-server-cloudimg-dpdk-modify.sh
#
# Warning: the script will create files by default in:
#   /tmp/workspace/yardstick
# the files will be owned by root!
#
# TODO: image resize is needed if the base image is too small
#

set -e
set -x

die() {
    echo "error: $1" >&2
    exit 1
}

test $# -eq 1 || die "no image specific script as argument"
test $(id -u) -eq 0 || die "should invoke using sudo"

cmd=$1
test -x $cmd
mountdir="/mnt/yardstick"

workspace=${WORKSPACE:-"/tmp/workspace/yardstick"}
host=${HOST:-"cloud-images.ubuntu.com"}
release=${RELEASE:-"wily"}
image_path="${release}/current/${release}-server-cloudimg-amd64-disk1.img"
image_url=${IMAGE_URL:-"https://${host}/${image_path}"}
md5sums_path="${release}/current/MD5SUMS"
md5sums_url=${MD5SUMS_URL:-"https://${host}/${md5sums_path}"}

imgfile="${workspace}/yardstick-${release}-server"
raw_imgfile="${workspace}/yardstick-${release}-server.raw"
filename=$(basename $image_url)

# download and checksum base image, conditionally if local copy is outdated
download() {
    test -d $workspace || mkdir -p $workspace
    cd $workspace
    rm -f MD5SUMS # always download the checksum file to a detect stale image
    wget $md5sums_url
    test -e $filename || wget -nc $image_url
    grep $filename MD5SUMS | md5sum -c ||
    if [ $? -ne 0 ]; then
        rm $filename
        wget -nc $image_url
        grep $filename MD5SUMS | md5sum -c
    fi
    qemu-img convert $filename $raw_imgfile
    cd -
}

# mount image
setup() {
    mkdir -p $mountdir

    for i in $(seq 0 9); do
        [ -a /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i
    done

    loopdevice=$(kpartx -l $raw_imgfile | head -1 | cut -f1 -d ' ')

    kpartx -a $raw_imgfile

    mount /dev/mapper/$loopdevice $mountdir
    mount -t proc none $mountdir/proc

    echo $loopdevice

    sudo resize2fs /dev/mapper/$loopdevice

    cp $cmd $mountdir/$(basename $cmd)
}

# modify image running a script using in a chrooted environment
modify() {
    # resolv.conf does not exist in base image, pass nameserver value from host
    nameserver_ip=$(grep -m 1 '^nameserver' \
        /etc/resolv.conf | awk '{ print $2 '})

    # prevent init scripts from running during install
    echo $'#!/bin/sh\nexit 101' >$mountdir/usr/sbin/policy-rc.d
    chmod a+x $mountdir/usr/sbin/policy-rc.d

    chroot $mountdir /$(basename $cmd) $nameserver_ip

    rm -rf $mountdir/usr/sbin/policy-rc.d

    umount -f $mountdir/proc
    umount $mountdir

    qemu-img convert -c -o compat=0.10 -O qcow2 $raw_imgfile $imgfile
#    qemu-img convert -O vmdk $raw_imgfile $imgfile

    if dmsetup table | grep $loopdevice; then
       dmsetup clear $loopdevice || true
    fi
}

# cleanup (umount) the image
cleanup() {
    # designed to be idempotent
    mount | grep $mountdir/proc && umount $mountdir/proc
    mount | grep $mountdir && umount $mountdir
    if [ -f $raw_imgfile ]; then
        kpartx -dv $raw_imgfile || true
    fi
    rm -f $raw_imgfile
    rm -rf $mountdir
}

exitcode=""
error_trap()
{
    local rc=$?

    set +e

    if [ -z "$exitcode" ]; then
        exitcode=$rc
    fi

    cleanup

    echo "Image build failed with $exitcode"

    exit $exitcode
}

main() {
    cleanup

    trap "error_trap" EXIT SIGTERM

    download
    setup
    modify
    trap - EXIT SIGTERM
    cleanup

    echo "the modified image is found here: $imgfile"
}

main