## vim: tabstop=4 shiftwidth=4 softtabstop=4

## Copyright (c) 2012 Hewlett-Packard Development Company, L.P.
## All Rights Reserved.
##
##    Licensed under the Apache License, Version 2.0 (the "License"); you may
##    not use this file except in compliance with the License. You may obtain
##    a copy of the License at
##
##         http://www.apache.org/licenses/LICENSE-2.0
##
##    Unless required by applicable law or agreed to in writing, software
##    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
##    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
##    License for the specific language governing permissions and limitations
##    under the License.


# This file provides devstack with the environment and utilities to
# control nova-compute's baremetal driver.
# It sets reasonable defaults to run within a single host,
# using virtual machines in place of physical hardware.
# However, by changing just a few options, devstack+baremetal can in fact
# control physical hardware resources on the same network, if you know
# the MAC address(es) and IPMI credentials.
#
# At a minimum, to enable the baremetal driver, you must set these in localrc:
#
#    VIRT_DRIVER=baremetal
#    ENABLED_SERVICES="$ENABLED_SERVICES,baremetal"
#
#
# We utilize diskimage-builder to create a ramdisk, and then
# baremetal driver uses that to push a disk image onto the node(s).
#
# Below we define various defaults which control the behavior of the
# baremetal compute service, and inform it of the hardware it will control.
#
# Below that, various functions are defined, which are called by devstack
# in the following order:
#
# before nova-cpu starts:
#
#  - prepare_baremetal_toolchain
#  - configure_baremetal_nova_dirs
#
# after nova and glance have started:
#
#  - build_and_upload_baremetal_deploy_k_and_r $token
#  - create_baremetal_flavor $BM_DEPLOY_KERNEL_ID $BM_DEPLOY_RAMDISK_ID
#  - upload_baremetal_image $url $token
#  - add_baremetal_node <first_mac> <second_mac>


# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace


# Sub-driver settings
# -------------------

# sub-driver to use for kernel deployment
#
# - nova.virt.baremetal.pxe.PXE
# - nova.virt.baremetal.tilera.TILERA
BM_DRIVER=${BM_DRIVER:-nova.virt.baremetal.pxe.PXE}

# sub-driver to use for remote power management
#
# - nova.virt.baremetal.fake.FakePowerManager, for manual power control
# - nova.virt.baremetal.ipmi.IPMI, for remote IPMI
# - nova.virt.baremetal.tilera_pdu.Pdu, for TilePro hardware
BM_POWER_MANAGER=${BM_POWER_MANAGER:-nova.virt.baremetal.fake.FakePowerManager}


# These should be customized to your environment and hardware
# -----------------------------------------------------------

# whether to create a fake environment, eg. for devstack-gate
BM_USE_FAKE_ENV=`trueorfalse False $BM_USE_FAKE_ENV`

# Extra options to pass to bm_poseur
# change the bridge name or IP: --bridge br99 --bridge-ip 192.0.2.1
# change the virtualization type: --engine qemu
BM_POSEUR_EXTRA_OPTS=${BM_POSEUR_EXTRA_OPTS:-}

# To provide PXE, configure nova-network's dnsmasq rather than run the one
# dedicated to baremetal. When enable this, make sure these conditions are
# fulfilled:
#
# 1) nova-compute and nova-network runs on the same host
# 2) nova-network uses FlatDHCPManager
#
# NOTE: the other BM_DNSMASQ_* have no effect on the behavior if this option
# is enabled.
BM_DNSMASQ_FROM_NOVA_NETWORK=`trueorfalse False $BM_DNSMASQ_FROM_NOVA_NETWORK`

# BM_DNSMASQ_IFACE should match FLAT_NETWORK_BRIDGE
if [ "$BM_USE_FAKE_ENV" ]; then
    BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-br99}
    BM_DNSMASQ_RANGE=${BM_DNSMASQ_RANGE:-192.0.2.32,192.0.2.48}
else
    BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-eth0}
    # if testing on a physical network,
    # BM_DNSMASQ_RANGE must be changed to suit your network
    BM_DNSMASQ_RANGE=${BM_DNSMASQ_RANGE:-}
fi

# BM_DNSMASQ_DNS provide dns server to bootstrap clients
BM_DNSMASQ_DNS=${BM_DNSMASQ_DNS:-}

# BM_FIRST_MAC *must* be set to the MAC address of the node you will
# boot.  This is passed to dnsmasq along with the kernel/ramdisk to
# deploy via PXE.
BM_FIRST_MAC=${BM_FIRST_MAC:-}

# BM_SECOND_MAC is only important if the host has >1 NIC.
BM_SECOND_MAC=${BM_SECOND_MAC:-}

# Hostname for the baremetal nova-compute node, if not run on this host
BM_HOSTNAME=${BM_HOSTNAME:-$(hostname -f)}

# BM_PM_* options are only necessary if BM_POWER_MANAGER=...IPMI
BM_PM_ADDR=${BM_PM_ADDR:-0.0.0.0}
BM_PM_USER=${BM_PM_USER:-user}
BM_PM_PASS=${BM_PM_PASS:-pass}

# BM_FLAVOR_* options are arbitrary and not necessarily related to
# physical hardware capacity. These can be changed if you are testing
# BaremetalHostManager with multiple nodes and different flavors.
BM_CPU_ARCH=${BM_CPU_ARCH:-x86_64}
BM_FLAVOR_CPU=${BM_FLAVOR_CPU:-1}
BM_FLAVOR_RAM=${BM_FLAVOR_RAM:-1024}
BM_FLAVOR_ROOT_DISK=${BM_FLAVOR_ROOT_DISK:-10}
BM_FLAVOR_EPHEMERAL_DISK=${BM_FLAVOR_EPHEMERAL_DISK:-0}
BM_FLAVOR_SWAP=${BM_FLAVOR_SWAP:-1}
BM_FLAVOR_NAME=${BM_FLAVOR_NAME:-bm.small}
BM_FLAVOR_ID=${BM_FLAVOR_ID:-11}
BM_FLAVOR_ARCH=${BM_FLAVOR_ARCH:-$BM_CPU_ARCH}


# Below this, we set some path and filenames.
# Defaults are probably sufficient.
BM_IMAGE_BUILD_DIR=${BM_IMAGE_BUILD_DIR:-$DEST/diskimage-builder}
BM_POSEUR_DIR=${BM_POSEUR_DIR:-$DEST/bm_poseur}

# Use DIB to create deploy ramdisk and kernel.
BM_BUILD_DEPLOY_RAMDISK=`trueorfalse True $BM_BUILD_DEPLOY_RAMDISK`
# If not use DIB, these files are used as deploy ramdisk/kernel.
# (The value must be a relative path from $TOP_DIR/files/)
BM_DEPLOY_RAMDISK=${BM_DEPLOY_RAMDISK:-}
BM_DEPLOY_KERNEL=${BM_DEPLOY_KERNEL:-}

# If you need to add any extra flavors to the deploy ramdisk image
# eg, specific network drivers, specify them here
BM_DEPLOY_FLAVOR=${BM_DEPLOY_FLAVOR:-}

# set URL and version for google shell-in-a-box
BM_SHELL_IN_A_BOX=${BM_SHELL_IN_A_BOX:-http://shellinabox.googlecode.com/files/shellinabox-2.14.tar.gz}


# Functions
# ---------

# Check if baremetal is properly enabled
# Returns false if VIRT_DRIVER is not baremetal, or if ENABLED_SERVICES
# does not contain "baremetal"
function is_baremetal() {
    if [[ "$ENABLED_SERVICES" =~ 'baremetal' && "$VIRT_DRIVER" = 'baremetal' ]]; then
        return 0
    fi
    return 1
}

# Install diskimage-builder and shell-in-a-box
# so that we can build the deployment kernel & ramdisk
function prepare_baremetal_toolchain() {
    git_clone $BM_IMAGE_BUILD_REPO $BM_IMAGE_BUILD_DIR $BM_IMAGE_BUILD_BRANCH
    git_clone $BM_POSEUR_REPO $BM_POSEUR_DIR $BM_POSEUR_BRANCH

    local shellinabox_basename=$(basename $BM_SHELL_IN_A_BOX)
    if [[ ! -e $DEST/$shellinabox_basename ]]; then
        cd $DEST
        wget $BM_SHELL_IN_A_BOX
    fi
    if [[ ! -d $DEST/${shellinabox_basename%%.tar.gz} ]]; then
        cd $DEST
        tar xzf $shellinabox_basename
    fi
    if [[ ! $(which shellinaboxd) ]]; then
        cd $DEST/${shellinabox_basename%%.tar.gz}
        ./configure
        make
        sudo make install
    fi
}

# set up virtualized environment for devstack-gate testing
function create_fake_baremetal_env() {
    local bm_poseur="$BM_POSEUR_DIR/bm_poseur"
    # TODO(deva): add support for >1 VM
    sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS create-bridge
    sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS create-vm
    BM_FIRST_MAC=$(sudo $bm_poseur get-macs)

    # NOTE: there is currently a limitation in baremetal driver
    # that requires second MAC even if it is not used.
    # Passing a fake value allows this to work.
    # TODO(deva): remove this after driver issue is fixed.
    BM_SECOND_MAC='12:34:56:78:90:12'
}

function cleanup_fake_baremetal_env() {
    local bm_poseur="$BM_POSEUR_DIR/bm_poseur"
    sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-vm
    sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-bridge
}

# prepare various directories needed by baremetal hypervisor
function configure_baremetal_nova_dirs() {
    # ensure /tftpboot is prepared
    sudo mkdir -p /tftpboot
    sudo mkdir -p /tftpboot/pxelinux.cfg

    PXEBIN=/usr/share/syslinux/pxelinux.0
    if [ ! -f $PXEBIN ]; then
        PXEBIN=/usr/lib/syslinux/pxelinux.0
        if [ ! -f $PXEBIN ]; then
            die $LINENO "pxelinux.0 (from SYSLINUX) not found."
        fi
    fi

    sudo cp $PXEBIN /tftpboot/
    sudo chown -R $STACK_USER:$LIBVIRT_GROUP /tftpboot

    # ensure $NOVA_STATE_PATH/baremetal is prepared
    sudo mkdir -p $NOVA_STATE_PATH/baremetal
    sudo mkdir -p $NOVA_STATE_PATH/baremetal/console
    sudo mkdir -p $NOVA_STATE_PATH/baremetal/dnsmasq
    sudo touch $NOVA_STATE_PATH/baremetal/dnsmasq/dnsmasq-dhcp.host
    sudo chown -R $STACK_USER $NOVA_STATE_PATH/baremetal

    # ensure dnsmasq is installed but not running
    # because baremetal driver will reconfigure and restart this as needed
    is_package_installed dnsmasq || install_package dnsmasq
    stop_service dnsmasq
}

# build deploy kernel+ramdisk, then upload them to glance
# this function sets BM_DEPLOY_KERNEL_ID and BM_DEPLOY_RAMDISK_ID
function upload_baremetal_deploy() {
    token=$1

    if [ "$BM_BUILD_DEPLOY_RAMDISK" = "True" ]; then
        BM_DEPLOY_KERNEL=bm-deploy.kernel
        BM_DEPLOY_RAMDISK=bm-deploy.initramfs
        if [ ! -e "$TOP_DIR/files/$BM_DEPLOY_KERNEL" -o ! -e "$TOP_DIR/files/$BM_DEPLOY_RAMDISK" ]; then
            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR deploy \
                -o $TOP_DIR/files/bm-deploy
        fi
    fi

    # load them into glance
    BM_DEPLOY_KERNEL_ID=$(glance \
        --os-auth-token $token \
        --os-image-url http://$GLANCE_HOSTPORT \
        image-create \
        --name $BM_DEPLOY_KERNEL \
        --is-public True --disk-format=aki \
        < $TOP_DIR/files/$BM_DEPLOY_KERNEL  | grep ' id ' | get_field 2)
    BM_DEPLOY_RAMDISK_ID=$(glance \
        --os-auth-token $token \
        --os-image-url http://$GLANCE_HOSTPORT \
        image-create \
        --name $BM_DEPLOY_RAMDISK \
        --is-public True --disk-format=ari \
        < $TOP_DIR/files/$BM_DEPLOY_RAMDISK  | grep ' id ' | get_field 2)
}

# create a basic baremetal flavor, associated with deploy kernel & ramdisk
#
# Usage: create_baremetal_flavor <aki_uuid> <ari_uuid>
function create_baremetal_flavor() {
    aki=$1
    ari=$2
    nova flavor-create $BM_FLAVOR_NAME $BM_FLAVOR_ID \
        $BM_FLAVOR_RAM $BM_FLAVOR_ROOT_DISK $BM_FLAVOR_CPU
    nova flavor-key $BM_FLAVOR_NAME set \
        "cpu_arch"="$BM_FLAVOR_ARCH" \
        "baremetal:deploy_kernel_id"="$aki" \
        "baremetal:deploy_ramdisk_id"="$ari"

}

# Pull run-time kernel/ramdisk out of disk image and load into glance.
# Note that $file is currently expected to be in qcow2 format.
# Sets KERNEL_ID and RAMDISK_ID
#
# Usage: extract_and_upload_k_and_r_from_image $token $file
function extract_and_upload_k_and_r_from_image() {
    token=$1
    file=$2
    image_name=$(basename "$file" ".qcow2")

    # this call returns the file names as "$kernel,$ramdisk"
    out=$($BM_IMAGE_BUILD_DIR/bin/disk-image-get-kernel \
            -x -d $TOP_DIR/files -o bm-deploy -i $file)
    if [ $? -ne 0 ]; then
        die $LINENO "Failed to get kernel and ramdisk from $file"
    fi
    XTRACE=$(set +o | grep xtrace)
    set +o xtrace
    out=$(echo "$out" | tail -1)
    $XTRACE
    OUT_KERNEL=${out%%,*}
    OUT_RAMDISK=${out##*,}

    # load them into glance
    KERNEL_ID=$(glance \
        --os-auth-token $token \
        --os-image-url http://$GLANCE_HOSTPORT \
        image-create \
        --name $image_name-kernel \
        --is-public True --disk-format=aki \
        < $TOP_DIR/files/$OUT_KERNEL | grep ' id ' | get_field 2)
    RAMDISK_ID=$(glance \
        --os-auth-token $token \
        --os-image-url http://$GLANCE_HOSTPORT \
        image-create \
        --name $image_name-initrd \
        --is-public True --disk-format=ari \
        < $TOP_DIR/files/$OUT_RAMDISK | grep ' id ' | get_field 2)
}


# Re-implementation of devstack's "upload_image" function
#
# Takes the same parameters, but has some peculiarities which made it
# easier to create a separate method, rather than complicate the logic
# of the existing function.
function upload_baremetal_image() {
    local image_url=$1
    local token=$2

    # Create a directory for the downloaded image tarballs.
    mkdir -p $FILES/images

    # Downloads the image (uec ami+aki style), then extracts it.
    IMAGE_FNAME=`basename "$image_url"`
    if [[ ! -f $FILES/$IMAGE_FNAME || \
        "$(stat -c "%s" $FILES/$IMAGE_FNAME)" = "0" ]]; then
        wget -c $image_url -O $FILES/$IMAGE_FNAME
        if [[ $? -ne 0 ]]; then
            echo "Not found: $image_url"
            return
        fi
    fi

    local KERNEL=""
    local RAMDISK=""
    local DISK_FORMAT=""
    local CONTAINER_FORMAT=""
    case "$IMAGE_FNAME" in
        *.tar.gz|*.tgz)
            # Extract ami and aki files
            [ "${IMAGE_FNAME%.tar.gz}" != "$IMAGE_FNAME" ] &&
                IMAGE_NAME="${IMAGE_FNAME%.tar.gz}" ||
                IMAGE_NAME="${IMAGE_FNAME%.tgz}"
            xdir="$FILES/images/$IMAGE_NAME"
            rm -Rf "$xdir";
            mkdir "$xdir"
            tar -zxf $FILES/$IMAGE_FNAME -C "$xdir"
            KERNEL=$(for f in "$xdir/"*-vmlinuz* "$xdir/"aki-*/image; do
                [ -f "$f" ] && echo "$f" && break; done; true)
            RAMDISK=$(for f in "$xdir/"*-initrd* "$xdir/"ari-*/image; do
                [ -f "$f" ] && echo "$f" && break; done; true)
            IMAGE=$(for f in "$xdir/"*.img "$xdir/"ami-*/image; do
                [ -f "$f" ] && echo "$f" && break; done; true)
            if [[ -z "$IMAGE_NAME" ]]; then
                IMAGE_NAME=$(basename "$IMAGE" ".img")
            fi
            DISK_FORMAT=ami
            CONTAINER_FORMAT=ami
            ;;
        *.qcow2)
            IMAGE="$FILES/${IMAGE_FNAME}"
            IMAGE_NAME=$(basename "$IMAGE" ".qcow2")
            DISK_FORMAT=qcow2
            CONTAINER_FORMAT=bare
            ;;
        *) echo "Do not know what to do with $IMAGE_FNAME"; false;;
    esac

    if [ "$CONTAINER_FORMAT" = "bare" ]; then
        extract_and_upload_k_and_r_from_image $token $IMAGE
    elif [ "$CONTAINER_FORMAT" = "ami" ]; then
        KERNEL_ID=$(glance \
            --os-auth-token $token \
            --os-image-url http://$GLANCE_HOSTPORT \
            image-create \
            --name "$IMAGE_NAME-kernel" --is-public True \
            --container-format aki \
            --disk-format aki < "$KERNEL" | grep ' id ' | get_field 2)
        RAMDISK_ID=$(glance \
            --os-auth-token $token \
            --os-image-url http://$GLANCE_HOSTPORT \
            image-create \
            --name "$IMAGE_NAME-ramdisk" --is-public True \
            --container-format ari \
            --disk-format ari < "$RAMDISK" | grep ' id ' | get_field 2)
    else
        # TODO(deva): add support for other image types
        return
    fi

    glance \
        --os-auth-token $token \
        --os-image-url http://$GLANCE_HOSTPORT \
        image-create \
        --name "${IMAGE_NAME%.img}" --is-public True \
        --container-format $CONTAINER_FORMAT \
        --disk-format $DISK_FORMAT \
        ${KERNEL_ID:+--property kernel_id=$KERNEL_ID} \
        ${RAMDISK_ID:+--property ramdisk_id=$RAMDISK_ID} < "${IMAGE}"

    # override DEFAULT_IMAGE_NAME so that tempest can find the image
    # that we just uploaded in glance
    DEFAULT_IMAGE_NAME="${IMAGE_NAME%.img}"
}

function clear_baremetal_of_all_nodes() {
    list=$(nova baremetal-node-list | awk -F '| ' 'NR>3 {print $2}' )
    for node in $list; do
        nova baremetal-node-delete $node
    done
}

# Inform nova-baremetal about nodes, MACs, etc.
# Defaults to using BM_FIRST_MAC and BM_SECOND_MAC if parameters not specified
#
# Usage: add_baremetal_node <first_mac> <second_mac>
function add_baremetal_node() {
    mac_1=${1:-$BM_FIRST_MAC}
    mac_2=${2:-$BM_SECOND_MAC}

    id=$(nova baremetal-node-create \
        --pm_address="$BM_PM_ADDR" \
        --pm_user="$BM_PM_USER" \
        --pm_password="$BM_PM_PASS" \
        "$BM_HOSTNAME" \
        "$BM_FLAVOR_CPU" \
        "$BM_FLAVOR_RAM" \
        "$BM_FLAVOR_ROOT_DISK" \
        "$mac_1" \
        | grep ' id ' | get_field 2 )
    [ $? -eq 0 ] || [ "$id" ] || die $LINENO "Error adding baremetal node"
    if [ -n "$mac_2" ]; then
        id2=$(nova baremetal-interface-add "$id" "$mac_2" )
        [ $? -eq 0 ] || [ "$id2" ] || die $LINENO "Error adding interface to barmetal node $id"
    fi
}


# Restore xtrace
$XTRACE

# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End:
