#!/bin/bash
#
# Nuage Neutron Plugin
# ----------------------

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

function neutron_plugin_create_nova_conf {
    NOVA_OVS_BRIDGE=${NOVA_OVS_BRIDGE:-"br-int"}
    iniset $NOVA_CONF neutron ovs_bridge $NOVA_OVS_BRIDGE
    LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER
}

function neutron_plugin_install_agent_packages {
    :
}

function neutron_plugin_configure_common {
    Q_PLUGIN_CONF_PATH=etc/neutron/plugins/nuage
    Q_PLUGIN_CONF_FILENAME=nuage_plugin.ini
    Q_PLUGIN_CLASS="neutron.plugins.nuage.plugin.NuagePlugin"
    Q_PLUGIN_EXTENSIONS_PATH=neutron/plugins/nuage/extensions
    #Nuage specific Neutron defaults. Actual value must be set and sourced
    NUAGE_CNA_SERVERS=${NUAGE_CNA_SERVERS:-'localhost:8443'}
    NUAGE_CNA_SERVER_AUTH=${NUAGE_CNA_SERVER_AUTH:-'username:password'}
    NUAGE_CNA_ORGANIZATION=${NUAGE_CNA_ORGANIZATION:-'org'}
    NUAGE_CNA_SERVER_SSL=${NUAGE_CNA_SERVER_SSL:-'True'}
    NUAGE_CNA_BASE_URI=${NUAGE_CNA_BASE_URI:-'/'}
    NUAGE_CNA_AUTH_RESOURCE=${NUAGE_CNA_AUTH_RESOURCE:-'/'}
    NUAGE_CNA_DEF_NETPART_NAME=${NUAGE_CNA_DEF_NETPART_NAME:-''}
}

function neutron_plugin_configure_dhcp_agent {
    :
}

function neutron_plugin_configure_l3_agent {
    :
}

function neutron_plugin_configure_plugin_agent {
    :
}

function neutron_plugin_configure_service {
    iniset $NEUTRON_CONF DEFAULT api_extensions_path neutron/plugins/nuage/extensions/
    iniset /$Q_PLUGIN_CONF_FILE restproxy base_uri $NUAGE_CNA_BASE_URI
    iniset /$Q_PLUGIN_CONF_FILE restproxy serverssl $NUAGE_CNA_SERVER_SSL
    iniset /$Q_PLUGIN_CONF_FILE restproxy serverauth $NUAGE_CNA_SERVER_AUTH
    iniset /$Q_PLUGIN_CONF_FILE restproxy organization $NUAGE_CNA_ORGANIZATION
    iniset /$Q_PLUGIN_CONF_FILE restproxy server $NUAGE_CNA_SERVERS
    iniset /$Q_PLUGIN_CONF_FILE restproxy auth_resource $NUAGE_CNA_AUTH_RESOURCE
    iniset /$Q_PLUGIN_CONF_FILE restproxy default_net_partition_name $NUAGE_CNA_DEF_NETPART_NAME
}

function has_neutron_plugin_security_group {
    # 1 means False here
    return 1
}

# Restore xtrace
$_XTRACE_NEUTRON_NU
