# MidoNet
# -------

# This file implements functions required to configure MidoNet as the third-party
# system used with devstack's Neutron.  To include this file, specify the following
# variables in localrc:
#
# * enable_service midonet
#

# MidoNet devstack destination dir
MIDONET_DIR=${MIDONET_DIR:-$DEST/midonet}
MIDONET_API_PORT=${MIDONET_API_PORT:-8080}
MIDONET_API_URL=${MIDONET_API_URL:-http://localhost:$MIDONET_API_PORT/midonet-api}

# MidoNet client repo
MIDONET_CLIENT_REPO=${MIDONET_CLIENT_REPO:-https://github.com/midokura/python-midonetclient.git}
MIDONET_CLIENT_BRANCH=${MIDONET_CLIENT_BRANCH:-master}
MIDONET_CLIENT_DIR=${MIDONET_CLIENT_DIR:-$MIDONET_DIR/python-midonetclient}

# MidoNet OpenStack repo
MIDONET_OS_REPO=${MIDONET_OS_REPO:-https://github.com/midokura/midonet-openstack.git}
MIDONET_OS_BRANCH=${MIDONET_OS_BRANCH:-master}
MIDONET_OS_DIR=${MIDONET_OS_DIR:-$MIDONET_DIR/midonet-openstack}
MIDONET_SETUP_SCRIPT=${MIDONET_SETUP_SCRIPT:-$MIDONET_OS_DIR/bin/setup_midonet_topology.py}

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

function configure_midonet() {
    :
}

function init_midonet() {

    # Initialize DB.  Evaluate the output of setup_midonet_topology.py to set
    # env variables for provider router ID.
    eval `python $MIDONET_SETUP_SCRIPT $MIDONET_API_URL admin $ADMIN_PASSWORD admin provider_devices`
    die_if_not_set $LINENO provider_router_id "Error running midonet setup script, provider_router_id was not set."

    iniset /$Q_PLUGIN_CONF_FILE MIDONET provider_router_id $provider_router_id
}

function install_midonet() {
    git_clone $MIDONET_CLIENT_REPO $MIDONET_CLIENT_DIR $MIDONET_CLIENT_BRANCH
    git_clone $MIDONET_OS_REPO $MIDONET_OS_DIR $MIDONET_OS_BRANCH
    export PYTHONPATH=$MIDONET_CLIENT_DIR/src:$MIDONET_OS_DIR/src:$PYTHONPATH
}

function start_midonet() {
    :
}

function stop_midonet() {
    :
}

function check_midonet() {
    :
}

# Restore xtrace
$MY_XTRACE
