Browse code

Merge "enable quantum multi-node scenarios."

Jenkins authored on 2012/05/27 12:41:38
Showing 1 changed files
... ...
@@ -691,7 +691,7 @@ fi
691 691
 if is_service_enabled quantum; then
692 692
     git_clone $QUANTUM_CLIENT_REPO $QUANTUM_CLIENT_DIR $QUANTUM_CLIENT_BRANCH
693 693
 fi
694
-if is_service_enabled q-svc; then
694
+if is_service_enabled quantum; then
695 695
     # quantum
696 696
     git_clone $QUANTUM_REPO $QUANTUM_DIR $QUANTUM_BRANCH
697 697
 fi
... ...
@@ -730,7 +730,7 @@ fi
730 730
 if is_service_enabled quantum; then
731 731
     cd $QUANTUM_CLIENT_DIR; sudo python setup.py develop
732 732
 fi
733
-if is_service_enabled q-svc; then
733
+if is_service_enabled quantum; then
734 734
     cd $QUANTUM_DIR; sudo python setup.py develop
735 735
 fi
736 736
 if is_service_enabled m-svc; then
... ...
@@ -1030,128 +1030,111 @@ if is_service_enabled g-reg; then
1030 1030
     cp $GLANCE_DIR/etc/policy.json $GLANCE_POLICY_JSON
1031 1031
 fi
1032 1032
 
1033
-# Quantum
1033
+# Quantum (for controller or agent nodes)
1034 1034
 # -------
1035 1035
 if is_service_enabled quantum; then
1036 1036
     # Put config files in /etc/quantum for everyone to find
1037
-    QUANTUM_CONF_DIR=/etc/quantum
1038
-    if [[ ! -d $QUANTUM_CONF_DIR ]]; then
1039
-        sudo mkdir -p $QUANTUM_CONF_DIR
1037
+    if [[ ! -d /etc/quantum ]]; then
1038
+        sudo mkdir -p /etc/quantum
1039
+    fi
1040
+    sudo chown `whoami` /etc/quantum
1041
+
1042
+    if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
1043
+        Q_PLUGIN_CONF_PATH=etc/quantum/plugins/openvswitch
1044
+        Q_PLUGIN_CONF_FILENAME=ovs_quantum_plugin.ini
1045
+        Q_DB_NAME="ovs_quantum"
1046
+        Q_PLUGIN_CLASS="quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin"
1047
+    elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1048
+        # Install deps
1049
+        # FIXME add to files/apts/quantum, but don't install if not needed!
1050
+        install_package python-configobj
1051
+        Q_PLUGIN_CONF_PATH=etc/quantum/plugins/linuxbridge
1052
+        Q_PLUGIN_CONF_FILENAME=linuxbridge_conf.ini
1053
+        Q_DB_NAME="quantum_linux_bridge"
1054
+        Q_PLUGIN_CLASS="quantum.plugins.linuxbridge.LinuxBridgePlugin.LinuxBridgePlugin"
1055
+    else
1056
+        echo "Unknown Quantum plugin '$Q_PLUGIN'.. exiting"
1057
+        exit 1
1058
+    fi
1059
+
1060
+    # if needed, move config file from $QUANTUM_DIR/etc/quantum to /etc/quantum
1061
+    mkdir -p /$Q_PLUGIN_CONF_PATH
1062
+    Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
1063
+    if [[ -e $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE ]]; then
1064
+            sudo mv $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
1040 1065
     fi
1041
-    sudo chown `whoami` $QUANTUM_CONF_DIR
1042
-
1043
-    # Set default values when using Linux Bridge plugin
1044
-    if [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1045
-        # set the config file
1046
-        QUANTUM_LB_CONF_DIR=$QUANTUM_CONF_DIR/plugins/linuxbridge
1047
-        mkdir -p $QUANTUM_LB_CONF_DIR
1048
-        QUANTUM_LB_CONFIG_FILE=$QUANTUM_LB_CONF_DIR/linuxbridge_conf.ini
1049
-        # must remove this file from existing location, otherwise Quantum will prefer it
1050
-        if [[ -e $QUANTUM_DIR/etc/quantum/plugins/linuxbridge/linuxbridge_conf.ini ]]; then
1051
-            sudo mv $QUANTUM_DIR/etc/quantum/plugins/linuxbridge/linuxbridge_conf.ini $QUANTUM_LB_CONFIG_FILE
1066
+    sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/$Q_DB_NAME?charset=utf8/g" /$Q_PLUGIN_CONF_FILE
1067
+
1068
+    OVS_ENABLE_TUNNELING=${OVS_ENABLE_TUNNELING:-True}
1069
+    if [[ "$Q_PLUGIN" = "openvswitch" && $OVS_ENABLE_TUNNELING = "True" ]]; then
1070
+        OVS_VERSION=`ovs-vsctl --version | head -n 1 | awk '{print $4;}'`
1071
+        if [ $OVS_VERSION \< "1.4" ] && ! is_service_enabled q-svc ; then
1072
+            echo "You are running OVS version $OVS_VERSION."
1073
+            echo "OVS 1.4+ is required for tunneling between multiple hosts."
1074
+            exit 1
1052 1075
         fi
1053
-        #set the default network interface
1054
-        QUANTUM_LB_PRIVATE_INTERFACE=${QUANTUM_LB_PRIVATE_INTERFACE:-$GUEST_INTERFACE_DEFAULT}
1076
+        sudo sed -i -e "s/.*enable-tunneling = .*$/enable-tunneling = $OVS_ENABLE_TUNNELING/g" /$Q_PLUGIN_CONF_FILE
1055 1077
     fi
1056 1078
 fi
1057
-# Quantum service
1079
+
1080
+# Quantum service (for controller node)
1058 1081
 if is_service_enabled q-svc; then
1059
-    QUANTUM_PLUGIN_INI_FILE=$QUANTUM_CONF_DIR/plugins.ini
1082
+    Q_PLUGIN_INI_FILE=/etc/quantum/plugins.ini
1083
+    Q_CONF_FILE=/etc/quantum/quantum.conf
1060 1084
     # must remove this file from existing location, otherwise Quantum will prefer it
1061 1085
     if [[ -e $QUANTUM_DIR/etc/plugins.ini ]]; then
1062
-        sudo mv $QUANTUM_DIR/etc/plugins.ini $QUANTUM_PLUGIN_INI_FILE
1086
+        sudo mv $QUANTUM_DIR/etc/plugins.ini $Q_PLUGIN_INI_FILE
1063 1087
     fi
1064 1088
 
1065
-    if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
1066
-        # Install deps
1067
-        # FIXME add to files/apts/quantum, but don't install if not needed!
1068
-        if [[ "$os_PACKAGE" = "deb" ]]; then
1069
-            kernel_version=`cat /proc/version | cut -d " " -f3`
1070
-            install_package openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
1071
-        else
1072
-            ### FIXME(dtroyer): Find RPMs for OpenVSwitch
1073
-            echo "OpenVSwitch packages need to be located"
1074
-        fi
1075
-
1076
-        QUANTUM_OVS_CONF_DIR=$QUANTUM_CONF_DIR/plugins/openvswitch
1077
-        QUANTUM_OVS_CONFIG_FILE=$QUANTUM_OVS_CONF_DIR/ovs_quantum_plugin.ini
1089
+    if [[ -e $QUANTUM_DIR/etc/quantum.conf ]]; then
1090
+      sudo mv $QUANTUM_DIR/etc/quantum.conf $Q_CONF_FILE
1091
+    fi
1078 1092
 
1079
-        # Create database for the plugin/agent
1080
-        if is_service_enabled mysql; then
1081
-            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS ovs_quantum;'
1082
-            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE IF NOT EXISTS ovs_quantum CHARACTER SET utf8;'
1083
-        else
1084
-            echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin."
1085
-            exit 1
1086
-        fi
1087
-        # Make sure we're using the openvswitch plugin
1088
-        sudo sed -i -e "s/^provider =.*$/provider = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin/g" $QUANTUM_PLUGIN_INI_FILE
1089
-    elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1090
-        # Install deps
1091
-        # FIXME add to files/apts/quantum, but don't install if not needed!
1092
-        install_package python-configobj
1093
-        # Create database for the plugin/agent
1094
-        if is_service_enabled mysql; then
1095
-            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS quantum_linux_bridge;'
1096
-            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE IF NOT EXISTS quantum_linux_bridge;'
1097
-            if grep -Fxq "user = " $QUANTUM_LB_CONFIG_FILE
1098
-            then
1099
-                sudo sed -i -e "s/^connection = sqlite$/#connection = sqlite/g" $QUANTUM_LB_CONFIG_FILE
1100
-                sudo sed -i -e "s/^#connection = mysql$/connection = mysql/g" $QUANTUM_LB_CONFIG_FILE
1101
-                sudo sed -i -e "s/^user = .*$/user = $MYSQL_USER/g" $QUANTUM_LB_CONFIG_FILE
1102
-                sudo sed -i -e "s/^pass = .*$/pass = $MYSQL_PASSWORD/g" $QUANTUM_LB_CONFIG_FILE
1103
-                sudo sed -i -e "s/^host = .*$/host = $MYSQL_HOST/g" $QUANTUM_LB_CONFIG_FILE
1104
-            else
1105
-                sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/quantum_linux_bridge?charset=utf8/g" $QUANTUM_LB_CONFIG_FILE
1106
-            fi
1093
+    if is_service_enabled mysql; then
1094
+            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "DROP DATABASE IF EXISTS $Q_DB_NAME;"
1095
+            mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE IF NOT EXISTS $Q_DB_NAME CHARACTER SET utf8;"
1107 1096
         else
1108 1097
             echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin."
1109 1098
             exit 1
1110
-        fi
1111
-        # Make sure we're using the linuxbridge plugin
1112
-        sudo sed -i -e "s/^provider =.*$/provider = quantum.plugins.linuxbridge.LinuxBridgePlugin.LinuxBridgePlugin/g" $QUANTUM_PLUGIN_INI_FILE
1113
-    fi
1114
-    if [[ -e $QUANTUM_DIR/etc/quantum.conf ]]; then
1115
-        sudo mv $QUANTUM_DIR/etc/quantum.conf $QUANTUM_CONF_DIR/quantum.conf
1116 1099
     fi
1117
-    screen_it q-svc "cd $QUANTUM_DIR && PYTHONPATH=.:$QUANTUM_CLIENT_DIR:$PYTHONPATH python $QUANTUM_DIR/bin/quantum-server $QUANTUM_CONF_DIR/quantum.conf"
1100
+    sudo sed -i -e "s/^provider =.*$/provider = $Q_PLUGIN_CLASS/g" $Q_PLUGIN_INI_FILE
1101
+
1102
+    screen_it q-svc "cd $QUANTUM_DIR && python $QUANTUM_DIR/bin/quantum-server $Q_CONF_FILE"
1118 1103
 fi
1119 1104
 
1120 1105
 # Quantum agent (for compute nodes)
1121 1106
 if is_service_enabled q-agt; then
1122 1107
     if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
1108
+        # Install deps
1109
+        # FIXME add to files/apts/quantum, but don't install if not needed!
1110
+        if [[ "$os_PACKAGE" = "deb" ]]; then
1111
+            kernel_version=`cat /proc/version | cut -d " " -f3`
1112
+            install_package make fakeroot dkms openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
1113
+        else
1114
+            ### FIXME(dtroyer): Find RPMs for OpenVSwitch
1115
+            echo "OpenVSwitch packages need to be located"
1116
+        fi
1123 1117
         # Set up integration bridge
1124 1118
         OVS_BRIDGE=${OVS_BRIDGE:-br-int}
1119
+        for PORT in `sudo ovs-vsctl --no-wait list-ports $OVS_BRIDGE`; do
1120
+            if [[ "$PORT" =~ tap* ]]; then echo `sudo ip link delete $PORT` > /dev/null; fi
1121
+            sudo ovs-vsctl --no-wait del-port $OVS_BRIDGE $PORT
1122
+        done
1125 1123
         sudo ovs-vsctl --no-wait -- --if-exists del-br $OVS_BRIDGE
1126 1124
         sudo ovs-vsctl --no-wait add-br $OVS_BRIDGE
1127 1125
         sudo ovs-vsctl --no-wait br-set-external-id $OVS_BRIDGE bridge-id br-int
1128
-
1129
-        # Start up the quantum <-> openvswitch agent
1130
-        QUANTUM_OVS_CONF_DIR=$QUANTUM_CONF_DIR/plugins/openvswitch
1131
-        mkdir -p $QUANTUM_OVS_CONF_DIR
1132
-        QUANTUM_OVS_CONFIG_FILE=$QUANTUM_OVS_CONF_DIR/ovs_quantum_plugin.ini
1133
-        if [[ -e $QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini ]]; then
1134
-            sudo mv $QUANTUM_DIR/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini $QUANTUM_OVS_CONFIG_FILE
1135
-        fi
1136
-        sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/ovs_quantum?charset=utf8/g" $QUANTUM_OVS_CONFIG_FILE
1137
-        screen_it q-agt "sleep 4; sudo python $QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py $QUANTUM_OVS_CONFIG_FILE -v"
1126
+        sudo sed -i -e "s/.*local-ip = .*/local-ip = $HOST_IP/g" /$Q_PLUGIN_CONF_FILE
1127
+        AGENT_BINARY=$QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py
1138 1128
     elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1139 1129
        # Start up the quantum <-> linuxbridge agent
1140 1130
        install_package bridge-utils
1141
-       sudo sed -i -e "s/^physical_interface = .*$/physical_interface = $QUANTUM_LB_PRIVATE_INTERFACE/g" $QUANTUM_LB_CONFIG_FILE
1142
-       if grep -Fxq "user = " $QUANTUM_LB_CONFIG_FILE
1143
-       then
1144
-           sudo sed -i -e "s/^connection = sqlite$/#connection = sqlite/g" $QUANTUM_LB_CONFIG_FILE
1145
-           sudo sed -i -e "s/^#connection = mysql$/connection = mysql/g" $QUANTUM_LB_CONFIG_FILE
1146
-           sudo sed -i -e "s/^user = .*$/user = $MYSQL_USER/g" $QUANTUM_LB_CONFIG_FILE
1147
-           sudo sed -i -e "s/^pass = .*$/pass = $MYSQL_PASSWORD/g" $QUANTUM_LB_CONFIG_FILE
1148
-           sudo sed -i -e "s/^host = .*$/host = $MYSQL_HOST/g" $QUANTUM_LB_CONFIG_FILE
1149
-       else
1150
-           sudo sed -i -e "s/^sql_connection =.*$/sql_connection = mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/quantum_linux_bridge?charset=utf8/g" $QUANTUM_LB_CONFIG_FILE
1151
-       fi
1152
-
1153
-       screen_it q-agt "sleep 4; sudo python $QUANTUM_DIR/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py $QUANTUM_LB_CONFIG_FILE -v"
1131
+        #set the default network interface
1132
+       QUANTUM_LB_PRIVATE_INTERFACE=${QUANTUM_LB_PRIVATE_INTERFACE:-$GUEST_INTERFACE_DEFAULT}
1133
+       sudo sed -i -e "s/^physical_interface = .*$/physical_interface = $QUANTUM_LB_PRIVATE_INTERFACE/g" /$Q_PLUGIN_CONF_FILE
1134
+       AGENT_BINARY=$QUANTUM_DIR/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py
1154 1135
     fi
1136
+    # Start up the quantum agent
1137
+    screen_it q-agt "sudo python $AGENT_BINARY /$Q_PLUGIN_CONF_FILE -v"
1155 1138
 fi
1156 1139
 
1157 1140
 # Melange service
... ...
@@ -1281,6 +1264,21 @@ if is_service_enabled n-cpu; then
1281 1281
         fi
1282 1282
     fi
1283 1283
 
1284
+    QEMU_CONF=/etc/libvirt/qemu.conf
1285
+    if is_service_enabled quantum && [[ $Q_PLUGIN = "openvswitch" ]] && ! sudo grep -q '^cgroup_device_acl' $QEMU_CONF ; then
1286
+        # add /dev/net/tun to cgroup_device_acls, needed for type=ethernet interfaces
1287
+        sudo chmod 666 $QEMU_CONF
1288
+        sudo cat <<EOF >> /etc/libvirt/qemu.conf
1289
+cgroup_device_acl = [
1290
+    "/dev/null", "/dev/full", "/dev/zero",
1291
+    "/dev/random", "/dev/urandom",
1292
+    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
1293
+    "/dev/rtc", "/dev/hpet","/dev/net/tun",
1294
+]
1295
+EOF
1296
+        sudo chmod 644 $QEMU_CONF
1297
+    fi
1298
+
1284 1299
     if [[ "$os_PACKAGE" = "deb" ]]; then
1285 1300
         LIBVIRT_DAEMON=libvirt-bin
1286 1301
     else
... ...
@@ -1621,17 +1619,18 @@ if is_service_enabled quantum; then
1621 1621
         add_nova_opt "melange_host=$M_HOST"
1622 1622
         add_nova_opt "melange_port=$M_PORT"
1623 1623
     fi
1624
-    if is_service_enabled q-svc && [[ "$Q_PLUGIN" = "openvswitch" ]]; then
1625
-        add_nova_opt "libvirt_vif_type=ethernet"
1626
-        add_nova_opt "libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtOpenVswitchDriver"
1627
-        add_nova_opt "linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver"
1628
-        add_nova_opt "quantum_use_dhcp=True"
1629
-    elif is_service_enabled q-svc && [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1630
-        add_nova_opt "libvirt_vif_type=ethernet"
1631
-        add_nova_opt "libvirt_vif_driver=nova.virt.libvirt.vif.QuantumLinuxBridgeVIFDriver"
1632
-        add_nova_opt "linuxnet_interface_driver=nova.network.linux_net.QuantumLinuxBridgeInterfaceDriver"
1633
-        add_nova_opt "quantum_use_dhcp=True"
1624
+
1625
+    if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
1626
+        NOVA_VIF_DRIVER="nova.virt.libvirt.vif.LibvirtOpenVswitchDriver"
1627
+        LINUXNET_VIF_DRIVER="nova.network.linux_net.LinuxOVSInterfaceDriver"
1628
+    elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1629
+        NOVA_VIF_DRIVER="nova.virt.libvirt.vif.QuantumLinuxBridgeVIFDriver"
1630
+        LINUXNET_VIF_DRIVER="nova.network.linux_net.QuantumLinuxBridgeInterfaceDriver"
1634 1631
     fi
1632
+    add_nova_opt "libvirt_vif_type=ethernet"
1633
+    add_nova_opt "libvirt_vif_driver=$NOVA_VIF_DRIVER"
1634
+    add_nova_opt "linuxnet_interface_driver=$LINUXNET_VIF_DRIVER"
1635
+    add_nova_opt "quantum_use_dhcp=True"
1635 1636
 else
1636 1637
     add_nova_opt "network_manager=nova.network.manager.$NET_MAN"
1637 1638
 fi