# PLUMgrid Neutron Plugin
# Edgar Magana emagana@plumgrid.com
# ------------------------------------

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

#source $TOP_DIR/lib/neutron_plugins/ovs_base

function neutron_plugin_create_nova_conf() {
    :
}

function neutron_plugin_setup_interface_driver() {
    :
}

function neutron_plugin_configure_common() {
    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/plumgrid
    Q_PLUGIN_CONF_FILENAME=plumgrid.ini
    Q_DB_NAME="plumgrid_neutron"
    Q_PLUGIN_CLASS="neutron.plugins.plumgrid.plumgrid_plugin.plumgrid_plugin.NeutronPluginPLUMgridV2"
    PLUMGRID_DIRECTOR_IP=${PLUMGRID_DIRECTOR_IP:-localhost}
    PLUMGRID_DIRECTOR_PORT=${PLUMGRID_DIRECTOR_PORT:-7766}
}

function neutron_plugin_configure_service() {
    iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector director_server $PLUMGRID_DIRECTOR_IP
    iniset /$Q_PLUGIN_CONF_FILE PLUMgridDirector director_server_port $PLUMGRID_DIRECTOR_PORT
}

function neutron_plugin_configure_debug_command() {
    :
}

function is_neutron_ovs_base_plugin() {
    # False
    return 1
}

function has_neutron_plugin_security_group() {
    # False
    return 1
}

function neutron_plugin_check_adv_test_requirements() {
    is_service_enabled q-agt && is_service_enabled q-dhcp && return 0
}
# Restore xtrace
$MY_XTRACE
