Browse code

devstack support for v2 nova/quantum integration

Adds support to use v1 or v2 quantum api via NOVA_USE_QUANTUM_API

This fixes bug 1017760

Change-Id: Iaf77b830edc51fd4c820ddff9e1f482bc4c9904d

Aaron Rosen authored on 2012/07/07 05:08:49
Showing 2 changed files
... ...
@@ -1,4 +1,5 @@
1 1
 Aaron Lee <aaron.lee@rackspace.com>
2
+Aaron Rosen <arosen@nicira.com>
2 3
 Adam Gandelman <adamg@canonical.com>
3 4
 Andy Smith <github@anarkystic.com>
4 5
 Anthony Young <sleepsonthefloor@gmail.com>
... ...
@@ -264,6 +264,13 @@ Q_PLUGIN=${Q_PLUGIN:-openvswitch}
264 264
 Q_PORT=${Q_PORT:-9696}
265 265
 # Default Quantum Host
266 266
 Q_HOST=${Q_HOST:-localhost}
267
+# Which Quantum API nova should use
268
+NOVA_USE_QUANTUM_API=${NOVA_USE_QUANTUM_API:-v1}
269
+# Default admin username
270
+Q_ADMIN_USERNAME=${Q_ADMIN_USERNAME:-quantum}
271
+# Default auth strategy
272
+Q_AUTH_STRATEGY=${Q_AUTH_STRATEGY:-keystone}
273
+
267 274
 
268 275
 # Default Melange Port
269 276
 M_PORT=${M_PORT:-9898}
... ...
@@ -375,6 +382,7 @@ PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-$PUBLIC_INTERFACE_DEFAULT}
375 375
 PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-br100}
376 376
 FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
377 377
 FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
378
+NETWORK_GATEWAY=${NETWORK_GATEWAY:-10.0.0.1}
378 379
 FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.224/28}
379 380
 NET_MAN=${NET_MAN:-FlatDHCPManager}
380 381
 EC2_DMZ_HOST=${EC2_DMZ_HOST:-$SERVICE_HOST}
... ...
@@ -1023,7 +1031,11 @@ if is_service_enabled quantum; then
1023 1023
         Q_PLUGIN_CONF_PATH=etc/quantum/plugins/openvswitch
1024 1024
         Q_PLUGIN_CONF_FILENAME=ovs_quantum_plugin.ini
1025 1025
         Q_DB_NAME="ovs_quantum"
1026
-        Q_PLUGIN_CLASS="quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin"
1026
+        if [[ "$NOVA_USE_QUANTUM_API" = "v1" ]]; then
1027
+            Q_PLUGIN_CLASS="quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin"
1028
+        elif [[ "$NOVA_USE_QUANTUM_API" = "v2" ]]; then
1029
+            Q_PLUGIN_CLASS="quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2"
1030
+        fi
1027 1031
     elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1028 1032
         # Install deps
1029 1033
         # FIXME add to files/apts/quantum, but don't install if not needed!
... ...
@@ -1031,7 +1043,11 @@ if is_service_enabled quantum; then
1031 1031
         Q_PLUGIN_CONF_PATH=etc/quantum/plugins/linuxbridge
1032 1032
         Q_PLUGIN_CONF_FILENAME=linuxbridge_conf.ini
1033 1033
         Q_DB_NAME="quantum_linux_bridge"
1034
-        Q_PLUGIN_CLASS="quantum.plugins.linuxbridge.LinuxBridgePlugin.LinuxBridgePlugin"
1034
+        if [[ "$NOVA_USE_QUANTUM_API" = "v1" ]]; then
1035
+            Q_PLUGIN_CLASS="quantum.plugins.linuxbridge.LinuxBridgePlugin.LinuxBridgePlugin"
1036
+        elif [[ "$NOVA_USE_QUANTUM_API" = "v2" ]]; then
1037
+            Q_PLUGIN_CLASS="quantum.plugins.linuxbridge.lb_quantum_plugin.LinuxBridgePluginV2"
1038
+        fi
1035 1039
     else
1036 1040
         echo "Unknown Quantum plugin '$Q_PLUGIN'.. exiting"
1037 1041
         exit 1
... ...
@@ -1055,6 +1071,12 @@ if is_service_enabled quantum; then
1055 1055
         fi
1056 1056
         sudo sed -i -e "s/.*enable_tunneling = .*$/enable_tunneling = $OVS_ENABLE_TUNNELING/g" /$Q_PLUGIN_CONF_FILE
1057 1057
     fi
1058
+
1059
+    if [[ "$NOVA_USE_QUANTUM_API" = "v1" ]]; then
1060
+        iniset /$Q_PLUGIN_CONF_FILE AGENT target_v2_api False
1061
+    elif [[ "$NOVA_USE_QUANTUM_API" = "v2" ]]; then
1062
+        iniset /$Q_PLUGIN_CONF_FILE AGENT target_v2_api True
1063
+    fi
1058 1064
 fi
1059 1065
 
1060 1066
 # Quantum service (for controller node)
... ...
@@ -1064,15 +1086,15 @@ if is_service_enabled q-svc; then
1064 1064
     Q_POLICY_FILE=/etc/quantum/policy.json
1065 1065
 
1066 1066
     if [[ -e $QUANTUM_DIR/etc/quantum.conf ]]; then
1067
-      sudo mv $QUANTUM_DIR/etc/quantum.conf $Q_CONF_FILE
1067
+      sudo cp $QUANTUM_DIR/etc/quantum.conf $Q_CONF_FILE
1068 1068
     fi
1069 1069
 
1070 1070
     if [[ -e $QUANTUM_DIR/etc/api-paste.ini ]]; then
1071
-      sudo mv $QUANTUM_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
1071
+      sudo cp $QUANTUM_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
1072 1072
     fi
1073 1073
 
1074 1074
     if [[ -e $QUANTUM_DIR/etc/policy.json ]]; then
1075
-      sudo mv $QUANTUM_DIR/etc/policy.json $Q_POLICY_FILE
1075
+      sudo cp $QUANTUM_DIR/etc/policy.json $Q_POLICY_FILE
1076 1076
     fi
1077 1077
 
1078 1078
     if is_service_enabled mysql; then
... ...
@@ -1110,14 +1132,14 @@ if is_service_enabled q-agt; then
1110 1110
         sudo ovs-vsctl --no-wait add-br $OVS_BRIDGE
1111 1111
         sudo ovs-vsctl --no-wait br-set-external-id $OVS_BRIDGE bridge-id br-int
1112 1112
         sudo sed -i -e "s/.*local_ip = .*/local_ip = $HOST_IP/g" /$Q_PLUGIN_CONF_FILE
1113
-        AGENT_BINARY=$QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py
1113
+        AGENT_BINARY="$QUANTUM_DIR/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py"
1114 1114
     elif [[ "$Q_PLUGIN" = "linuxbridge" ]]; then
1115 1115
        # Start up the quantum <-> linuxbridge agent
1116 1116
        install_package bridge-utils
1117 1117
         #set the default network interface
1118 1118
        QUANTUM_LB_PRIVATE_INTERFACE=${QUANTUM_LB_PRIVATE_INTERFACE:-$GUEST_INTERFACE_DEFAULT}
1119 1119
        sudo sed -i -e "s/^physical_interface = .*$/physical_interface = $QUANTUM_LB_PRIVATE_INTERFACE/g" /$Q_PLUGIN_CONF_FILE
1120
-       AGENT_BINARY=$QUANTUM_DIR/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py
1120
+       AGENT_BINARY="$QUANTUM_DIR/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py"
1121 1121
     fi
1122 1122
     # Start up the quantum agent
1123 1123
     screen_it q-agt "sudo python $AGENT_BINARY /$Q_PLUGIN_CONF_FILE -v"
... ...
@@ -1694,15 +1716,27 @@ add_nova_opt "fixed_range=$FIXED_RANGE"
1694 1694
 add_nova_opt "s3_host=$SERVICE_HOST"
1695 1695
 add_nova_opt "s3_port=$S3_SERVICE_PORT"
1696 1696
 if is_service_enabled quantum; then
1697
-    add_nova_opt "network_manager=nova.network.quantum.manager.QuantumManager"
1698
-    add_nova_opt "quantum_connection_host=$Q_HOST"
1699
-    add_nova_opt "quantum_connection_port=$Q_PORT"
1697
+    if [[ "$NOVA_USE_QUANTUM_API" = "v1" ]]; then
1698
+        add_nova_opt "network_manager=nova.network.quantum.manager.QuantumManager"
1699
+        add_nova_opt "quantum_connection_host=$Q_HOST"
1700
+        add_nova_opt "quantum_connection_port=$Q_PORT"
1701
+        add_nova_opt "quantum_use_dhcp=True"
1702
+
1703
+        if is_service_enabled melange; then
1704
+            add_nova_opt "quantum_ipam_lib=nova.network.quantum.melange_ipam_lib"
1705
+            add_nova_opt "use_melange_mac_generation=True"
1706
+            add_nova_opt "melange_host=$M_HOST"
1707
+            add_nova_opt "melange_port=$M_PORT"
1708
+        fi
1700 1709
 
1701
-    if is_service_enabled melange; then
1702
-        add_nova_opt "quantum_ipam_lib=nova.network.quantum.melange_ipam_lib"
1703
-        add_nova_opt "use_melange_mac_generation=True"
1704
-        add_nova_opt "melange_host=$M_HOST"
1705
-        add_nova_opt "melange_port=$M_PORT"
1710
+    elif [[ "$NOVA_USE_QUANTUM_API" = "v2" ]]; then
1711
+        add_nova_opt "network_api_class=nova.network.quantumv2.api.API"
1712
+        add_nova_opt "quantum_admin_username=$Q_ADMIN_USERNAME"
1713
+        add_nova_opt "quantum_admin_password=$SERVICE_PASSWORD"
1714
+        add_nova_opt "quantum_admin_auth_url=$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_AUTH_PORT/v2.0"
1715
+        add_nova_opt "quantum_auth_strategy=$Q_AUTH_STRATEGY"
1716
+        add_nova_opt "quantum_admin_tenant_name=$SERVICE_TENANT_NAME"
1717
+        add_nova_opt "quantum_url=http://$Q_HOST:$Q_PORT"
1706 1718
     fi
1707 1719
 
1708 1720
     if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
... ...
@@ -1715,7 +1749,6 @@ if is_service_enabled quantum; then
1715 1715
     add_nova_opt "libvirt_vif_type=ethernet"
1716 1716
     add_nova_opt "libvirt_vif_driver=$NOVA_VIF_DRIVER"
1717 1717
     add_nova_opt "linuxnet_interface_driver=$LINUXNET_VIF_DRIVER"
1718
-    add_nova_opt "quantum_use_dhcp=True"
1719 1718
 else
1720 1719
     add_nova_opt "network_manager=nova.network.manager.$NET_MAN"
1721 1720
 fi
... ...
@@ -1914,9 +1947,9 @@ if is_service_enabled key; then
1914 1914
 
1915 1915
         # Add quantum endpoints to service catalog if quantum is enabled
1916 1916
         if is_service_enabled quantum; then
1917
-            echo "catalog.RegionOne.network.publicURL = http://%SERVICE_HOST%:9696/" >> $KEYSTONE_CATALOG
1918
-            echo "catalog.RegionOne.network.adminURL = http://%SERVICE_HOST%:9696/" >> $KEYSTONE_CATALOG
1919
-            echo "catalog.RegionOne.network.internalURL = http://%SERVICE_HOST%:9696/" >> $KEYSTONE_CATALOG
1917
+            echo "catalog.RegionOne.network.publicURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
1918
+            echo "catalog.RegionOne.network.adminURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
1919
+            echo "catalog.RegionOne.network.internalURL = http://%SERVICE_HOST%:$Q_PORT/" >> $KEYSTONE_CATALOG
1920 1920
             echo "catalog.RegionOne.network.name = Quantum Service" >> $KEYSTONE_CATALOG
1921 1921
         fi
1922 1922
 
... ...
@@ -1995,14 +2028,24 @@ fi
1995 1995
 # If we're using Quantum (i.e. q-svc is enabled), network creation has to
1996 1996
 # happen after we've started the Quantum service.
1997 1997
 if is_service_enabled mysql && is_service_enabled nova; then
1998
-    # Create a small network
1999
-    $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS
1998
+    if [[ "$NOVA_USE_QUANTUM_API" = "v1" ]]; then
1999
+        # Create a small network
2000
+        $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS
2001
+
2002
+        # Create some floating ips
2003
+        $NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE
2000 2004
 
2001
-    # Create some floating ips
2002
-    $NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE
2005
+        # Create a second pool
2006
+        $NOVA_DIR/bin/nova-manage floating create --ip_range=$TEST_FLOATING_RANGE --pool=$TEST_FLOATING_POOL
2007
+    elif [[ "$NOVA_USE_QUANTUM_API" = "v2" ]]; then
2008
+        TENANT_ID=$(keystone tenant-list | grep " demo " | get_field 1)
2003 2009
 
2004
-    # Create a second pool
2005
-    $NOVA_DIR/bin/nova-manage floating create --ip_range=$TEST_FLOATING_RANGE --pool=$TEST_FLOATING_POOL
2010
+        # Create a small network
2011
+        NET_ID=$(quantum net-create --os_token $Q_ADMIN_USERNAME --os_url http://$Q_HOST:$Q_PORT --tenant_id $TENANT_ID net1 | grep ' id ' | get_field 2)
2012
+
2013
+        # Create a subnet
2014
+        quantum subnet-create --os_token $Q_ADMIN_USERNAME --os_url http://$Q_HOST:$Q_PORT --tenant_id $TENANT_ID --ip_version 4 --gateway  $NETWORK_GATEWAY $NET_ID $FIXED_RANGE
2015
+    fi
2006 2016
 fi
2007 2017
 
2008 2018
 # Launching nova-compute should be as simple as running ``nova-compute`` but