Fix setup_networks.sh to run autocluster without dirty hacks
authorMartin Schwenke <martin@meltin.net>
Tue, 12 Mar 2013 04:36:54 +0000 (15:36 +1100)
committerMartin Schwenke <martin@meltin.net>
Tue, 12 Mar 2013 04:57:48 +0000 (15:57 +1100)
Signed-off-by: Martin Schwenke <martin@meltin.net>
host_setup/setup_networks.sh

index 68291f1f8834c185c780ab1eddf52d8747116cb9..7aae8a50a4d1666a47849bd998511b63173aa1c7 100755 (executable)
@@ -3,11 +3,10 @@
 base_dir=$(cd -P $(dirname $0) ; cd .. ; echo $PWD)
 autocluster="$base_dir/autocluster"
 
-# Run autocluster to determine desired network configuration.  The
-# KVM/SYSTEM_DISK_FORMAT thing is gross... but I'm not solving that
-# problem right now!
-networks=$(KVM=/bin/true SYSTEM_DISK_FORMAT=raw \
-    "$autocluster" "${1:+-c}" "$1" -e 'echo $NETWORKS')
+# Run autocluster to determine desired network configuration.
+network_map=$(NAME=setup_networks IPNUM=1 \
+    "$autocluster" "${1:+-c}" "$1" \
+    -e 'make_network_map ; echo $network_map' 2>/dev/null)
 
 die ()
 {
@@ -17,31 +16,27 @@ die ()
 
 gen_xml ()
 {
-    local n="$1"
-    local name="$2"
-
-    local prefix="${n%.*}"
-    local mode="nat"
-    case "$n" in
-       *,*,*) mode="${n##*,}"
-    esac
+    local netname="$1"
+    local ip="$2"
+    local mask="$3"
+    local opts="$4"
 
     local uuid=$(uuidgen)
 
     cat <<EOF
 <network>
-  <name>${name}</name>
+  <name>${netname}</name>
   <uuid>${uuid}</uuid>
 EOF
 
-    case "$mode" in
-       nat)
+    case "$opts" in
+       nat|)
            cat <<EOF
   <forward mode='nat'/>
 EOF
            ;;
        bridge\=*)
-           iface="${mode#bridge=}"
+           iface="${opts#bridge=}"
            cat <<EOF
   <forward dev='${iface}' mode='route'>
     <interface dev='${iface}'/>
@@ -49,27 +44,22 @@ EOF
 EOF
            ;;
        *)
-           die "Unknown forwarding mode \"${mode}\" in \"$n\""
+           die "Unknown forwarding options \"${opts}\" for \"${netname}\""
     esac
 cat <<EOF
-  <bridge name='${name}' stp='on' forwardDelay='0' />
-  <ip address='${prefix}.1' netmask='255.255.255.0'>
+  <bridge name='${netname}' stp='on' forwardDelay='0' />
+  <ip address='${ip}' netmask='${mask}'>
   </ip>
 </network>
 EOF
 }
 
-count=1
-for n in $networks ; do
-    echo "Processing: $n"
-    # This must match the code in network_template()
-    net="${n%/*}"
-    name="acnet_${net//./_}"
+while read netname dev ip mask mac opts ; do
+    echo "Setting up network \"${netname}\""
     t=$(mktemp)
-    gen_xml "$n" "$name" >"$t"
-    echo "Setting up network \"${name}\""
+    gen_xml "$netname" "$ip" "$mask" "$opts" >"$t"
     virsh net-define "$t" && \
-       virsh net-start "$name" && \
-       virsh net-autostart "$name"
+       virsh net-start "$netname" && \
+       virsh net-autostart "$netname"
     rm -f "$t"
-done
+done <"$network_map"