#!/bin/bash
#scrit to set onie boot modes from NOS
# modes supported rescue/install/uninstall

VERBOSE=no
ONIEPATH="/mnt/onie-boot"

unset ONIE_MODE

function set_onie_boot()
{
    # If reboot to ONIE is requested, set the ONIE boot mode (update/install/uninstall/rescue)
    # and reboot.
    
    # Exit if not superuser
    if [[ "$EUID" -ne 0 ]]; then
        echo "This command must be run as root" >&2
        exit 1
    fi

    # Mount ONIE partition if not already mounted
    if ! grep -qs '/mnt/onie-boot ' /proc/mounts; then
        mkdir -p ${ONIEPATH}
        mount LABEL=ONIE-BOOT ${ONIEPATH} || ERR=$?
        if [[ ${ERR} -ne 0 ]]; then
            VERBOSE=yes debug "Failed to mount ONIE partition."
            exit 1
        fi
    fi

    # Set mode
    ${ONIEPATH}/onie/tools/bin/onie-boot-mode -o ${ONIE_MODE} || ERR=$?
    if [[ ${ERR} -ne 0 ]]; then
        VERBOSE=yes debug "Failed to set ONIE boot mode. Ensure that mode is valid"
        exit 1
    fi

    # Set next boot to ONIE
    grub-editenv /host/grub/grubenv set next_entry=ONIE || ERR=$?
    if [[ ${ERR} -ne 0 ]]; then
        VERBOSE=yes debug "Failed to set next boot to ONIE."
        exit 1
    fi
    echo "next boot mode set to onie - ${ONIE_MODE}"

}


function debug()
{
    if [[ x"${VERBOSE}" == x"yes" ]]; then
        echo `date` $@
    fi
    logger "$@"
}


SCRIPT=$0

function show_help_and_exit()
{
    echo "Usage ${SCRIPT} [options]"
    echo "    This script will set modes in onie rescue/uninstall/install."
    echo " "
    echo "    Available options:"
    echo "        -h, -? : getting this help"
    echo "        -o [mode]    : boot into ONIE"

    exit 0
}

function parse_options()
{
    while getopts "h?vo:" opt; do
        case $opt in
            h|\? )
                show_help_and_exit
                ;;
            o )
                ONIE_MODE=$OPTARG
                set_onie_boot
                ;;
            v )
                VERBOSE=yes
                ;;
        esac
    done
}

parse_options $@