Don't hardcode VM interfaces connected by pipework
diff --git a/xos/cord/models.py b/xos/cord/models.py
index 7cf58e7..37b29a5 100644
--- a/xos/cord/models.py
+++ b/xos/cord/models.py
@@ -633,15 +633,7 @@
@property
def wan_mac(self):
- ip = self.wan_ip
- if not ip:
- return None
- try:
- (a,b,c,d) = ip.split('.')
- wan_mac = "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
- except:
- wan_mac = "Exception"
- return wan_mac
+ return self.addresses.get("wan", (None, None) )[1]
@property
def private_ip(self):
diff --git a/xos/observers/vcpe/steps/sync_vcpetenant.py b/xos/observers/vcpe/steps/sync_vcpetenant.py
index 53d0c54..753d2e0 100644
--- a/xos/observers/vcpe/steps/sync_vcpetenant.py
+++ b/xos/observers/vcpe/steps/sync_vcpetenant.py
@@ -116,10 +116,14 @@
if o.volt:
vlan_ids.append(o.volt.vlan_id)
+ # Probably should expose this in a config file
+ full_setup = True
+
fields = {"vlan_ids": vlan_ids,
"dnsdemux_ip": dnsdemux_ip,
"cdn_prefixes": cdn_prefixes,
- "bbs_addrs": bbs_addrs}
+ "bbs_addrs": bbs_addrs,
+ "full_setup": full_setup}
# add in the sync_attributes that come from the SubscriberRoot object
diff --git a/xos/observers/vcpe/templates/start-vcpe.sh.j2 b/xos/observers/vcpe/templates/start-vcpe.sh.j2
index 565adaf..7e714de 100755
--- a/xos/observers/vcpe/templates/start-vcpe.sh.j2
+++ b/xos/observers/vcpe/templates/start-vcpe.sh.j2
@@ -1,5 +1,15 @@
#!/bin/bash
+function mac_to_iface {
+ MAC=$1
+ ifconfig|grep $MAC| awk '{print $1}'|grep -v '\.'
+}
+
+function generate_mac_from_ip {
+ IP=$1
+ printf "02:42:%02x:%02x:%02x:%02x\n" `echo $IP|awk -F '.' '{print $1, $2, $3, $4}'`
+}
+
iptables -L > /dev/null
ip6tables -L > /dev/null
@@ -15,12 +25,18 @@
fi
# Set up networking via pipework
-docker exec $VCPE ifconfig eth0 >> /dev/null || pipework eth4 -i eth0 $VCPE {{ wan_ip }}/17@192.168.128.1 {{ wan_mac }}
-docker exec $VCPE ifconfig eth1 >> /dev/null || pipework eth3 -i eth1 $VCPE 192.168.0.1/24 @{{ vlan_ids[0] }}
-docker exec $VCPE ifconfig eth2 >> /dev/null || pipework eth0 -i eth2 $VCPE {{ hpc_client_ip }}/24
+WAN_CONTAINER_MAC=$( generate_mac_from_ip {{ wan_ip }} )
+WAN_IFACE=$( mac_to_iface {{ wan_mac }} )
+docker exec $VCPE ifconfig eth0 >> /dev/null || pipework $WAN_IFACE -i eth0 $VCPE {{ wan_ip }}/17@192.168.128.1 $WAN_CONTAINER_MAC
+
+LAN_IFACE=$( mac_to_iface {{ lan_mac }} )
+docker exec $VCPE ifconfig eth1 >> /dev/null || pipework $LAN_IFACE -i eth1 $VCPE 192.168.0.1/24 @{{ vlan_ids[0] }}
+
+HPC_IFACE=$( mac_to_iface {{ hpc_client_mac }} )
+docker exec $VCPE ifconfig eth2 >> /dev/null || pipework $HPC_IFACE -i eth2 $VCPE {{ hpc_client_ip }}/24
# Make sure VM's eth0 (hpc_client) has no IP address
-ifconfig eth0 0.0.0.0
+ifconfig $HPC_IFACE 0.0.0.0
# Now can start up dnsmasq
docker exec $VCPE service dnsmasq start