#!/bin/bash # # Neutron IBM SDN-VE plugin # --------------------------- # Save trace setting IBM_XTRACE=$(set +o | grep xtrace) set +o xtrace source $TOP_DIR/lib/neutron_plugins/ovs_base function neutron_plugin_install_agent_packages { _neutron_ovs_base_install_agent_packages } function _neutron_interface_setup { # Setup one interface on the integration bridge if needed # The plugin agent to be used if more than one interface is used local bridge=$1 local interface=$2 sudo ovs-vsctl --no-wait -- --may-exist add-port $bridge $interface } function neutron_setup_integration_bridge { # Setup integration bridge if needed if [[ "$SDNVE_INTEGRATION_BRIDGE" != "" ]]; then neutron_ovs_base_cleanup _neutron_ovs_base_setup_bridge $SDNVE_INTEGRATION_BRIDGE if [[ "$SDNVE_INTERFACE_MAPPINGS" != "" ]]; then interfaces=(${SDNVE_INTERFACE_MAPPINGS//[,:]/ }) _neutron_interface_setup $SDNVE_INTEGRATION_BRIDGE ${interfaces[1]} fi fi # Set controller to SDNVE controller (1st of list) if exists if [[ "$SDNVE_CONTROLLER_IPS" != "" ]]; then # Get the first controller controllers=(${SDNVE_CONTROLLER_IPS//[\[,\]]/ }) SDNVE_IP=${controllers[0]} sudo ovs-vsctl set-controller $SDNVE_INTEGRATION_BRIDGE tcp:$SDNVE_IP fi } function neutron_plugin_create_nova_conf { NOVA_VIF_DRIVER=${NOVA_VIF_DRIVER:-"nova.virt.libvirt.vif.LibvirtGenericVIFDriver"} # if n-cpu is enabled, then setup integration bridge if is_service_enabled n-cpu; then neutron_setup_integration_bridge fi } function is_neutron_ovs_base_plugin { if [[ "$SDNVE_INTEGRATION_BRIDGE" != "" ]]; then # Yes, we use OVS. return 0 else # No, we do not use OVS. return 1 fi } function neutron_plugin_configure_common { Q_PLUGIN_CONF_PATH=etc/neutron/plugins/ibm Q_PLUGIN_CONF_FILENAME=sdnve_neutron_plugin.ini Q_PLUGIN_CLASS="neutron.plugins.ibm.sdnve_neutron_plugin.SdnvePluginV2" } function neutron_plugin_configure_service { # Define extra "SDNVE" configuration options when q-svc is configured iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver if [[ "$SDNVE_CONTROLLER_IPS" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve controller_ips $SDNVE_CONTROLLER_IPS fi if [[ "$SDNVE_INTEGRATION_BRIDGE" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve integration_bridge $SDNVE_INTEGRATION_BRIDGE fi if [[ "$SDNVE_RESET_BRIDGE" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve reset_bridge $SDNVE_RESET_BRIDGE fi if [[ "$SDNVE_OUT_OF_BAND" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve out_of_band $SDNVE_OUT_OF_BAND fi if [[ "$SDNVE_INTERFACE_MAPPINGS" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve interface_mappings $SDNVE_INTERFACE_MAPPINGS fi if [[ "$SDNVE_FAKE_CONTROLLER" != "" ]]; then iniset /$Q_PLUGIN_CONF_FILE sdnve use_fake_controller $SDNVE_FAKE_CONTROLLER fi iniset $NEUTRON_CONF DEFAULT notification_driver neutron.openstack.common.notifier.no_op_notifier } function neutron_plugin_configure_plugin_agent { AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-ibm-agent" } function neutron_plugin_configure_debug_command { : } function neutron_plugin_setup_interface_driver { return 0 } function has_neutron_plugin_security_group { # Does not support Security Groups return 1 } function neutron_ovs_base_cleanup { if [[ "$SDNVE_RESET_BRIDGE" != False ]]; then # remove all OVS ports that look like Neutron created ports for port in $(sudo ovs-vsctl list port | grep -o -e tap[0-9a-f\-]* -e q[rg]-[0-9a-f\-]*); do sudo ovs-vsctl del-port ${port} done # remove integration bridge created by Neutron for bridge in $(sudo ovs-vsctl list-br | grep -o -e ${SDNVE_INTEGRATION_BRIDGE}); do sudo ovs-vsctl del-br ${bridge} done fi } # Restore xtrace $IBM_XTRACE