#!/bin/bash

. __FFOOD_INIT__
FFOOD_INIPATH="__FFOOD_INIPATH__"

ffood import core
ffood import proj_ol
ffood import testing
ffood import sw
ffood import yummy

ENVIRON_SCRIPT="$FFOOD_DATA_DIR-local/bash_env"
FFOOD_VERBOSE=true

# tmp needs to be shared to children
if test -d "$TMP_DIR";
then    # we must be child
    THIS_IS_CHILD=true
else    # we are top parent; need some setup
    THIS_IS_CHILD=false
    export TMP_DIR="$(mktemp -d)"
fi

[ "$(whoami)" == "root" ] || die "you need to be root"

yum_install_if_needed wget

case "$1" in


    ## ------ ##
    ## COMMON ##
    ## ------ ##

    abrtbz)
        echo "Updating abrt to internal version"
        save_repo_for abrtbz
        yum_update "abrt"
        ;;

    sl0)
        echo "Turning off SELinux"
        setenforce 0
        sed -i~ -e 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
        ;;


    ## ------- ##
    ## OPENLMI ##
    ## ------- ##

    ## setup  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ##

    olbrc)
        LMI_CIMOM_PORT=5989
        mkdir -p "$(dirname $ENVIRON_SCRIPT)"
        echo "Adding ol environment script $ENVIRON_SCRIPT to .bashrc"
        {
            # warning: only echo if not login shell or rsync will freak out
            echo "shopt -q login_shell && echo setting up ol environment variables"
            echo "export LMI_ACCOUNT_USER='account_test_user'"
            echo "export LMI_ACCOUNT_GROUP='account_test_group'"
            echo "export LMI_CIMOM_URL='https://${HOSTNAME}:$LMI_CIMOM_PORT'"
            echo "export LMI_CIMOM_USERNAME='pegasus'"
            echo "export LMI_CIMOM_PASSWORD='blank'"
            echo "export LMI_CIMOM_BROKER='tog-pegasus'"
            echo "export LMI_RUN_DANGEROUS='1'"
            echo "export LMI_IND_LISTENER_PORT='15000'"
            echo "export PYTHONPATH='$PYTHONPATH:$PWD/openlmi-providers/src/python'"
        } > $ENVIRON_SCRIPT
        append_if_missing \
            "test -f $ENVIRON_SCRIPT && . $ENVIRON_SCRIPT" \
            /root/.bashrc
        ;;

    olconfig)
        $0 sl0
        echo "Bypassing SSL verification"
        echo "127.0.0.1 $(hostname)" >> /etc/hosts
        service tog-pegasus start      # to generate server.pem
        service tog-pegasus stop
        cp "/etc/Pegasus/server.pem" \
           "/etc/pki/ca-trust/source/anchors/remote-server.pem"
        update-ca-trust
        echo "Setting pegasus password"
        echo "pegasus:blank" | chpasswd
        $0 olbrc
        ;;

    ## runtime  - - - - - - - - - - - - - - - - - - - - - - - - - - - - ##

    olenv)
        . $ENVIRON_SCRIPT
        ;;

    olcs)
        echo "Starting a simple cimserver ($(comment_cimserver))"
        start_cimserver
        ;;

    olrun*)
        $0 olcs
        $0 olenv
        iniread -p mk.run.what.$2 mk-ol.ini \
            | while read path;
              do
                  pushd "$(dirname $path)";
                  nosetests --nocapture -v "$(basename $path)"
                  popd
              done
        stop_cimserver
        ;;

    OL)
        save_repo_for openlmi-scripts
        echo "Installing OpenLMI software"
        iniread -s mk.requires.sut mk-ol.ini | any_install
        echo "Installing testing tools"
        iniread -s mk.requires.test mk-ol.ini | any_install
        $0 olconfig
        ;;


    ## --------- ##
    ## BEAKERLIB ##
    ## --------- ##

    bkrund)
        TERM=xterm reset
        pushd "mk-$2"
        make run > 1
        popd
        ;;

    bkrun)
        pushd "mk-$2"
        make run
        popd
        ;;

    ## rpmwork  - - - - - - - - - - - - - - - - - - - - - - - - - - - - ##

    rpmso)
        path=rpms/old/`arch`
        echo "Deploying old RPMs from $path"
        guess_pkgnames $path | yum_preerase
        yum_install $path/*
        guess_pkgnames $path | installed_versions
        ;;

    rpmsn)
        path=rpms/new/`arch`
        echo "Deploying new RPMs from $path"
        guess_pkgnames $path | yum_preerase
        yum_install $path/*
        guess_pkgnames $path | installed_versions
        ;;

    RH)
        save_repo_for beakerlib
        save_repo_for rhpkg
        save_repo_for beakerlib-redhat
        echo "Installing tested software"
        iniread -s mk.requires.sut mk-bk.ini | any_install
        echo "Installing testing tools"
        iniread -s mk.requires.test mk-bk.ini | any_install
        ;;

    *)
        usage_is "TARGET"

esac

if ! $THIS_IS_CHILD;
then
    collect_artifacts artifacts
    rm -rf $TMP_DIR
fi