#!/bin/bash

# Neutron loadbalancer plugin
# ---------------------------

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


AGENT_LBAAS_BINARY="$NEUTRON_BIN_DIR/neutron-lbaas-agent"
LBAAS_PLUGIN=neutron_lbaas.services.loadbalancer.plugin.LoadBalancerPlugin

function neutron_agent_lbaas_install_agent_packages {
    if is_ubuntu || is_fedora || is_suse; then
        install_package haproxy
    fi
}

function neutron_agent_lbaas_configure_common {
    _neutron_service_plugin_class_add $LBAAS_PLUGIN
    _neutron_deploy_rootwrap_filters $NEUTRON_LBAAS_DIR
}

function neutron_agent_lbaas_configure_agent {
    LBAAS_AGENT_CONF_PATH=/etc/neutron/services/loadbalancer/haproxy
    mkdir -p $LBAAS_AGENT_CONF_PATH

    LBAAS_AGENT_CONF_FILENAME="$LBAAS_AGENT_CONF_PATH/lbaas_agent.ini"

    cp $NEUTRON_LBAAS_DIR/etc/lbaas_agent.ini $LBAAS_AGENT_CONF_FILENAME

    # ovs_use_veth needs to be set before the plugin configuration
    # occurs to allow plugins to override the setting.
    iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT ovs_use_veth $Q_OVS_USE_VETH

    neutron_plugin_setup_interface_driver $LBAAS_AGENT_CONF_FILENAME

    if is_fedora; then
        iniset $LBAAS_AGENT_CONF_FILENAME DEFAULT user_group "nobody"
        iniset $LBAAS_AGENT_CONF_FILENAME haproxy user_group "nobody"
    fi
}

function neutron_lbaas_stop {
    pids=$(ps aux | awk '/haproxy/ { print $2 }')
    [ ! -z "$pids" ] && sudo kill $pids || true
}

# Restore xtrace
$LB_XTRACE
