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 ()
{
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}'/>
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"