Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ansible/config_sonic_basedon_testbed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
42 changes: 40 additions & 2 deletions ansible/library/generate_golden_config_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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']
Expand Down Expand Up @@ -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 = "{}"

Expand All @@ -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():
Expand Down
Loading