fix case where max is blank; allocate devices automatically
diff --git a/xos/openstack_observer/steps/sync_container.py b/xos/openstack_observer/steps/sync_container.py
index 9dbcef2..fdee9e7 100644
--- a/xos/openstack_observer/steps/sync_container.py
+++ b/xos/openstack_observer/steps/sync_container.py
@@ -43,13 +43,14 @@
i=0
ports = []
for port in o.ports.all():
- if not port.mac:
+ if (not port.ip):
+ # 'unmanaged' ports may have an ip, but no mac
+ # XXX: are there any ports that have a mac but no ip?
raise Exception("Port on network %s is not yet ready" % port.network.name)
pd={}
- pd["device"] = "eth%d" % i
- pd["mac"] = port.mac
- pd["ip"] = port.ip
+ pd["mac"] = port.mac or ""
+ pd["ip"] = port.ip or ""
if o.isolation == "container":
# container on bare metal
@@ -71,7 +72,12 @@
ports.append(pd)
- i = i + 1
+ # for any ports that don't have a device, assign one
+ used_ports = [x["device"] for x in ports if ("device" in x)]
+ avail_ports = ["eth%d"%i for i in range(0,64) if ("eth%d"%i not in used_ports)]
+ for port in ports:
+ if not port.get("device",None):
+ port["device"] = avail_ports.pop(0)
return ports
diff --git a/xos/openstack_observer/steps/sync_container.yaml b/xos/openstack_observer/steps/sync_container.yaml
index 887d145..4a050a5 100644
--- a/xos/openstack_observer/steps/sync_container.yaml
+++ b/xos/openstack_observer/steps/sync_container.yaml
@@ -11,7 +11,7 @@
ports:
{% for port in ports %}
- device: {{ port.device }}
- mac: {{ port.mac }}
+ mac: {{ port.mac|default("") }}
ip: {{ port.ip }}
snoop_instance_mac: {{ port.snoop_instance_mac }}
snoop_instance_id: {{ port.snoop_instance_id }}
diff --git a/xos/openstack_observer/templates/start-container.sh.j2 b/xos/openstack_observer/templates/start-container.sh.j2
index ccd419a..9ed7faa 100644
--- a/xos/openstack_observer/templates/start-container.sh.j2
+++ b/xos/openstack_observer/templates/start-container.sh.j2
@@ -33,7 +33,7 @@
{% endif %}
{% if port.c_tag %}
-CTAG_ARG="@{{ port.c_tax }}"
+CTAG_ARG="@{{ port.c_tag }}"
{% else %}
CTAG_ARG=""
{% endif %}
@@ -49,7 +49,12 @@
{% else %}
# container-on-metal
IP="{{ port.ip }}"
+{% if port.mac %}
MAC="{{ port.mac }}"
+{% else %}
+MAC=""
+{% endif %}
+
DEVICE="{{ port.device }}"
INSTANCE_MAC="{{ port.snoop_instance_mac }}"
INSTANCE_ID="{{ port.snoop_instance_id }}"
@@ -57,7 +62,7 @@
INSTANCE_TAP=${INSTANCE_TAP:3}
VLAN_ID=`ovs-vsctl show | grep -i -A 1 port.*$INSTANCE_TAP | grep -i tag | awk '{print $2}'`
TAP="con`echo ${CONTAINER}_$DEVICE|md5sum|awk '{print $1}'`"
-TAP=${TAP:0:12}
+TAP=${TAP:0:10}
echo im=$INSTANCE_MAC ii=$INSTANCE_ID it=$INSTANCE_TAP vlan=$VLAN_ID tap=$TAP con=$CONTAINER dev=$DEVICE mac=$MAC
ovs-vsctl show | grep -i $TAP
if [[ $? == 1 ]]; then