diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2015-02-27 09:20:21 +0000 |
---|---|---|
committer | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2015-04-08 18:29:25 +0100 |
commit | d0a9c1dc01e28db1d6c74326864f957336876e21 (patch) | |
tree | d779d1d344b890f5a0a5dfef3b69631d81eaf7f6 | |
parent | fa2e9d45ef18f34a4ca5939624618d03a6dac10c (diff) | |
download | definitions-d0a9c1dc01e28db1d6c74326864f957336876e21.tar.gz |
Rejigger networking so the bridge has the MAC of the external interface
This allows the subsequent DHCP request to get the same IP address back,
which means it only needs one address for first boot, and the address
can be pre-allocated by the DHCP server before deployment.
This is needed for the floating address range to be allocated in some
set-ups, such as our local one at the office, where a subnet in a
different class is routed to the server.
-rw-r--r-- | openstack/usr/share/openstack/openstack-neutron-network-configuration-for-one-node | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/openstack/usr/share/openstack/openstack-neutron-network-configuration-for-one-node b/openstack/usr/share/openstack/openstack-neutron-network-configuration-for-one-node index 68106fac..dadbaaa6 100644 --- a/openstack/usr/share/openstack/openstack-neutron-network-configuration-for-one-node +++ b/openstack/usr/share/openstack/openstack-neutron-network-configuration-for-one-node @@ -20,6 +20,7 @@ set -xe # Get the first ethernet driver and its ip eth_dev="$(ip addr | perl -pe 'if (/^\d+: ([^:]+)/) { $iface=$1; } if (m@^\s*inet ([^/]+)/@) { print "$iface $1\n"; } $_=undef;' | grep "^e" | head -1 | awk '{ print $1 } ')" eth_ip="$(ip addr | perl -pe 'if (/^\d+: ([^:]+)/) { $iface=$1; } if (m@^\s*inet ([^/]+)/@) { print "$iface $1\n"; } $_=undef;' | grep "^e" | head -1 | awk '{ print $2 } ')" +eth_mac="$(ip link show $eth_dev | tr -s '[:space:]' '\n' | sed -n '/link\/ether/{n;p}')" ip link add proxy-br-eth1 type veth peer name eth1-br-proxy ip link add proxy-br-ex type veth peer name ex-br-proxy @@ -42,8 +43,24 @@ Name=$devname EOF done +# restart networkd so it understands to not bring up these interfaces +systemctl restart systemd-networkd.service + +# Deallocate ip address for external interface so we don't try to route +# connections out of an interface that no longer works +ip addr del $eth_ip dev $eth_dev + +# Create our external bridge +ovs-vsctl add-br br-eth0 +# Bind our external device to the bridge +ovs-vsctl add-port br-eth0 $eth_dev +# Tell the bridge that it has the mac address of the external device now +ovs-vsctl set bridge br-eth0 other-config:hwaddr=$eth_mac +ip link set br-eth0 promisc on -# DHCP on the Open vSwitch device that replaces our external interface +# restart networkd again so it will DHCP on the Open vSwitch device that +# replaces our external interface, but with the mac address of the external +# interface, so it ought to get the same address back install -D -m 644 /proc/self/fd/0 <<EOF /etc/systemd/network/10-br-ex-dhcp.network [Match] Name=br-eth0 @@ -51,16 +68,10 @@ Name=br-eth0 [Network] DHCP=yes EOF - -# restart networkd so it understands the new config systemctl restart systemd-networkd.service -ovs-vsctl add-br br-eth0 -ovs-vsctl add-port br-eth0 $eth_dev -ip link set br-eth0 promisc on -# Deallocate ip address for external interface so we don't try to route -# connections out of an interface that no longer works -ip addr del $eth_ip dev $eth_dev + +# Add the rest of the bridges ovs-vsctl add-br br-eth1 ovs-vsctl add-br br-ex ovs-vsctl add-port br-eth1 eth1-br-proxy |