diff --git a/ansible/roles/vm_set/library/vm_topology.py b/ansible/roles/vm_set/library/vm_topology.py index 4da39a863df..21f1bff1c33 100644 --- a/ansible/roles/vm_set/library/vm_topology.py +++ b/ansible/roles/vm_set/library/vm_topology.py @@ -129,6 +129,23 @@ cmd_debug_fname = None +def adaptive_name(template, host, index): + """ + A helper function for interface/bridge name calculation. + Since the name of interface must be less than 15 bytes. This util is to adjust the template automatically + according to the length of vmhost name and port index. The leading characters (inje, muxy, mbr) will be shorten if necessary + e.g. + port 21 on vms7-6 -> inje-vms7-6-21 + port 121 on vms21-1 -> inj-vms21-1-121 + port 121 on vms121-1 -> in-vms121-1-121 + """ + MAX_LEN = 15 + host_index_str = '-%s-%d' % (host, index) + leading_len = MAX_LEN - len(host_index_str) + leading_characters = template.split('-')[0][:leading_len] + rendered_name = leading_characters + host_index_str + return rendered_name + class HostInterfaces(object): """Data descriptor that supports multi-DUTs interface definition.""" @@ -255,7 +272,7 @@ def extract_vm_vlans(self): def create_bridges(self): for vm in self.vm_names: for fp_num in range(self.max_fp_num): - fp_br_name = OVS_FP_BRIDGE_TEMPLATE % (vm, fp_num) + fp_br_name = adaptive_name(OVS_FP_BRIDGE_TEMPLATE, vm, fp_num) self.create_ovs_bridge(fp_br_name, self.fp_mtu) if self.topo and 'DUT' in self.topo and 'vs_chassis' in self.topo['DUT']: @@ -307,7 +324,7 @@ def add_injected_fp_ports_to_docker(self): """ for vlan in self.injected_fp_ports: (_, _, ptf_index) = VMTopology.parse_vm_vlan_port(vlan) - ext_if = INJECTED_INTERFACES_TEMPLATE % (self.vm_set_name, ptf_index) + ext_if = adaptive_name(INJECTED_INTERFACES_TEMPLATE, self.vm_set_name, ptf_index) int_if = PTF_FP_IFACE_TEMPLATE % ptf_index self.add_veth_if_to_docker(ext_if, int_if) @@ -479,10 +496,10 @@ def bind_fp_ports(self, disconnect_vm=False): """ for attr in self.VMs.values(): for idx, vlan in enumerate(attr['vlans']): - br_name = OVS_FP_BRIDGE_TEMPLATE % (self.vm_names[self.vm_base_index + attr['vm_offset']], idx) + br_name = adaptive_name(OVS_FP_BRIDGE_TEMPLATE, self.vm_names[self.vm_base_index + attr['vm_offset']], idx) vm_iface = OVS_FP_TAP_TEMPLATE % (self.vm_names[self.vm_base_index + attr['vm_offset']], idx) (dut_index, vlan_index, ptf_index) = VMTopology.parse_vm_vlan_port(vlan) - injected_iface = INJECTED_INTERFACES_TEMPLATE % (self.vm_set_name, ptf_index) + injected_iface = adaptive_name(INJECTED_INTERFACES_TEMPLATE, self.vm_set_name, ptf_index) self.bind_ovs_ports(br_name, self.duts_fp_ports[self.duts_name[dut_index]][str(vlan_index)], injected_iface, vm_iface, disconnect_vm) if self.topo and 'DUT' in self.topo and 'vs_chassis' in self.topo['DUT']: @@ -495,7 +512,7 @@ def bind_fp_ports(self, disconnect_vm=False): def unbind_fp_ports(self): for attr in self.VMs.values(): for vlan_num, vlan in enumerate(attr['vlans']): - br_name = OVS_FP_BRIDGE_TEMPLATE % (self.vm_names[self.vm_base_index + attr['vm_offset']], vlan_num) + br_name = adaptive_name(OVS_FP_BRIDGE_TEMPLATE, self.vm_names[self.vm_base_index + attr['vm_offset']], vlan_num) vm_iface = OVS_FP_TAP_TEMPLATE % (self.vm_names[self.vm_base_index + attr['vm_offset']], vlan_num) self.unbind_ovs_ports(br_name, vm_iface) @@ -651,7 +668,7 @@ def create_muxy_cable(self, host_ifindex, host_if, upper_if, lower_if, active_if +--------------+ """ - br_name = MUXY_BRIDGE_TEMPLATE % (self.vm_set_name, host_ifindex) + br_name = adaptive_name(MUXY_BRIDGE_TEMPLATE, self.vm_set_name, host_ifindex) self.create_ovs_bridge(br_name, self.fp_mtu) @@ -686,7 +703,7 @@ def remove_muxy_cable(self, host_ifindex): remove muxy cable """ - br_name = MUXY_BRIDGE_TEMPLATE % (self.vm_set_name, host_ifindex) + br_name = adaptive_name(MUXY_BRIDGE_TEMPLATE, self.vm_set_name, host_ifindex) self.destroy_ovs_bridge(br_name) @@ -711,7 +728,7 @@ def add_host_ports(self): # Otherwise, it means that host interface does not have "@x" in topo definition, then assume that # there is no gap in sequence of host interfaces. host_ifindex = intf[0][2] if len(intf[0]) == 3 else i - muxy_if = MUXY_INTERFACES_TEMPLATE % (self.vm_set_name, host_ifindex) + muxy_if = adaptive_name(MUXY_INTERFACES_TEMPLATE, self.vm_set_name, host_ifindex) ptf_if = PTF_FP_IFACE_TEMPLATE % host_ifindex self.add_veth_if_to_docker(muxy_if, ptf_if) diff --git a/ansible/veos b/ansible/veos index 6a1e781db63..136f9be810a 100644 --- a/ansible/veos +++ b/ansible/veos @@ -27,6 +27,7 @@ all: - t0-116 - dualtor - dualtor-56 + - dualtor-120 - tgen-t0-3 - tgen-t1-3-lag - mgmttor diff --git a/ansible/veos_vtb b/ansible/veos_vtb index cdce01f6c42..1764351459a 100644 --- a/ansible/veos_vtb +++ b/ansible/veos_vtb @@ -25,6 +25,7 @@ all: - t0-116 - dualtor - dualtor-56 + - dualtor-120 - t2-vs children: server_1: