# 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 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}

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

function configure_midonet {
    :
}

function init_midonet {
    :
}

function install_midonet {
    git_clone $MIDONET_CLIENT_REPO $MIDONET_CLIENT_DIR $MIDONET_CLIENT_BRANCH
    export PYTHONPATH=$MIDONET_CLIENT_DIR/src:$PYTHONPATH
}

function start_midonet {
    :
}

function stop_midonet {
    :
}

function check_midonet {
    :
}

# Restore xtrace
$MN3_XTRACE
