diff --git a/ansible/config_sonic_basedon_testbed.yml b/ansible/config_sonic_basedon_testbed.yml index 7d1bf14b653..9ed3ce1ea71 100644 --- a/ansible/config_sonic_basedon_testbed.yml +++ b/ansible/config_sonic_basedon_testbed.yml @@ -635,6 +635,7 @@ generate_golden_config_db: topo_name: "{{ topo }}" port_index_map: "{{ port_index_map | default({}) }}" + hwsku: "{{ hwsku }}" become: true - name: Copy macsec profile json to dut diff --git a/ansible/library/generate_golden_config_db.py b/ansible/library/generate_golden_config_db.py index f80ca119484..7c56bc5443b 100644 --- a/ansible/library/generate_golden_config_db.py +++ b/ansible/library/generate_golden_config_db.py @@ -37,18 +37,32 @@ logger = logging.getLogger(__name__) +LOSSY_HWSKU = frozenset({'Arista-7060X6-64PE-C256S2', 'Arista-7060X6-64PE-C224O8', + 'Mellanox-SN5600-C256S1', 'Mellanox-SN5600-C224O8', + 'Arista-7060X6-64PE-B-C512S2', 'Arista-7060X6-64PE-B-C448O16', + 'Mellanox-SN5640-C512S2', 'Mellanox-SN5640-C448O16'}) + + +def is_full_lossy_hwsku(hwsku): + """ + Return True if the platform is lossy-only and PFCWD should default to ‘disable’. + """ + return hwsku in LOSSY_HWSKU + class GenerateGoldenConfigDBModule(object): def __init__(self): self.module = AnsibleModule(argument_spec=dict(topo_name=dict(required=True, type='str'), port_index_map=dict(require=False, type='dict', default=None), macsec_profile=dict(require=False, type='str', default=None), - num_asics=dict(require=False, type='int', default=1)), + num_asics=dict(require=False, type='int', default=1), + hwsku=dict(require=False, type='str', default=None)), supports_check_mode=True) self.topo_name = self.module.params['topo_name'] self.port_index_map = self.module.params['port_index_map'] self.macsec_profile = self.module.params['macsec_profile'] self.num_asics = self.module.params['num_asics'] + self.hwsku = self.module.params['hwsku'] def generate_mgfx_golden_config_db(self): rc, out, err = self.module.run_command("sonic-cfggen -H -m -j /etc/sonic/init_cfg.json --print-data") @@ -107,6 +121,23 @@ def generate_mx_golden_config_db(self): gold_config_db.update(dhcp_server_config_obj) return gold_config_db + def generate_full_lossy_golden_config_db(self): + rc, out, err = self.module.run_command("sonic-cfggen -H -m -j /etc/sonic/init_cfg.json --print-data") + if rc != 0: + self.module.fail_json(msg="Failed to get config from minigraph: {}".format(err)) + + # Generate config table from init_cfg.ini + ori_config_db = json.loads(out) + + golden_config_db = {} + if "DEVICE_METADATA" in ori_config_db: + golden_config_db["DEVICE_METADATA"] = ori_config_db["DEVICE_METADATA"] + if ("localhost" in golden_config_db["DEVICE_METADATA"] and + "default_pfcwd_status" in golden_config_db["DEVICE_METADATA"]["localhost"]): + golden_config_db["DEVICE_METADATA"]["localhost"]["default_pfcwd_status"] = "disable" + + return json.dumps(golden_config_db, indent=4) + def check_version_for_bmp(self): output_version = device_info.get_sonic_version_info() build_version = output_version['build_version'] @@ -345,17 +376,24 @@ def update_dns_config(self, config): return config def generate(self): + module_msg = "Success to generate golden_config_db.json" # topo check if self.topo_name == "mx" or "m0" in self.topo_name: config = self.generate_mgfx_golden_config_db() + module_msg = module_msg + " for mgfx" self.module.run_command("sudo rm -f {}".format(TEMP_DHCP_SERVER_CONFIG_PATH)) elif self.topo_name in ["t1-smartswitch-ha", "t1-28-lag", "smartswitch-t1"]: config = self.generate_smartswitch_golden_config_db() + module_msg = module_msg + " for smartswitch" self.module.run_command("sudo rm -f {}".format(TEMP_SMARTSWITCH_CONFIG_PATH)) elif "t2" in self.topo_name and self.macsec_profile: config = self.generate_t2_golden_config_db() + module_msg = module_msg + " for t2" self.module.run_command("sudo rm -f {}".format(MACSEC_PROFILE_PATH)) self.module.run_command("sudo rm -f {}".format(GOLDEN_CONFIG_TEMPLATE_PATH)) + elif self.hwsku and is_full_lossy_hwsku(self.hwsku): + module_msg = module_msg + " for full lossy hwsku" + config = self.generate_full_lossy_golden_config_db() else: config = "{}" @@ -372,7 +410,7 @@ def generate(self): with open(GOLDEN_CONFIG_DB_PATH, "w") as temp_file: temp_file.write(config) - self.module.exit_json(change=True, msg="Success to generate golden_config_db.json") + self.module.exit_json(change=True, msg=module_msg) def main():