# 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
