diff --git a/ansible/library/dual_tor_facts.py b/ansible/library/dual_tor_facts.py index 1629959fdb1..76978a2f90b 100644 --- a/ansible/library/dual_tor_facts.py +++ b/ansible/library/dual_tor_facts.py @@ -1,4 +1,26 @@ +import os +import yaml + from collections import defaultdict + +try: + from ansible.module_utils.dualtor_utils import generate_mux_cable_facts +except ImportError: + # Add parent dir for using outside Ansible + import sys + sys.path.append('..') + from ansible.module_utils.dualtor_utils import generate_mux_cable_facts + + +def load_topo_file(topo_name): + """Load topo definition yaml file.""" + topo_file = "vars/topo_%s.yml" % topo_name + if not os.path.exists(topo_file): + raise ValueError("Topo file %s not exists" % topo_file) + with open(topo_file) as fd: + return yaml.safe_load(fd) + + class DualTorParser: def __init__(self, hostname, testbed_facts, host_vars, vm_config, port_alias, vlan_intfs): @@ -64,6 +86,14 @@ def generate_cable_names(self): self.dual_tor_facts['cables'] = cables + def generate_mux_cable_facts(self): + topo_name = self.testbed_facts["topo"] + # use mux_cable_facts only for dualtor mixed topologies + if "mixed" in topo_name: + topology = load_topo_file(topo_name)["topology"] + mux_cable_facts = generate_mux_cable_facts(topology=topology) + self.dual_tor_facts["mux_cable_facts"] = mux_cable_facts + def get_dual_tor_facts(self): ''' Gathers facts related to a dual ToR configuration @@ -73,6 +103,7 @@ def get_dual_tor_facts(self): self.parse_tor_position() self.generate_cable_names() self.parse_loopback_ips() + self.generate_mux_cable_facts() return self.dual_tor_facts diff --git a/ansible/templates/minigraph_png.j2 b/ansible/templates/minigraph_png.j2 index 51a35cadb19..e93c40c83fa 100644 --- a/ansible/templates/minigraph_png.j2 +++ b/ansible/templates/minigraph_png.j2 @@ -139,12 +139,21 @@ {% set server_base_address_v6 = (vlan_configs.values() | list)[0]['prefix_v6'] %} {% set server_base_address_v6 = server_base_address_v6 | ipaddr('network') %} {% set server_base_address_v6 = ':'.join(server_base_address_v6.split(':')[:-1]) + ':{:x}' %} +{% set mux_cable_facts = dual_tor_facts['mux_cable_facts'] if 'mux_cable_facts' in dual_tor_facts %} {% for cable in dual_tor_facts['cables'] %} +{% set intf_index = port_alias.index(cable['dut_intf'])|string %} SmartCable +{% if mux_cable_facts is defined %} + {{ mux_cable_facts[intf_index]['cable_type'] }} +
+ {{ mux_cable_facts[intf_index]['soc_ipv4'] if 'soc_ipv4' in mux_cable_facts[intf_index] else '0.0.0.0/0' }} +
+{% else %}
0.0.0.0/0
+{% endif %} ::/0 @@ -159,12 +168,21 @@
Server +{% if mux_cable_facts is defined %} +
+ {{ mux_cable_facts[intf_index]['server_ipv4'] }} +
+ + {{ mux_cable_facts[intf_index]['server_ipv6'] }} + +{% else %}
{{ server_base_address_v4.format(loop.index + 1) }}/26 -
+ {{ server_base_address_v6.format(loop.index + 1) }}/96 +{% endif %} 0.0.0.0/0