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 @@ -610,6 +610,7 @@
generate_golden_config_db:
topo_name: "{{ topo }}"
port_index_map: "{{ port_index_map | default({}) }}"
hwsku: "{{ hwsku }}"
become: true

- name: Use minigraph case
Expand Down
41 changes: 39 additions & 2 deletions ansible/library/generate_golden_config_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,28 @@

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)),
port_index_map=dict(require=False, type='dict', default=None),
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.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 @@ -97,6 +111,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 @@ -251,11 +282,17 @@ def generate_smartswitch_golden_config_db(self):
return json.dumps(gold_config_db, indent=4)

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"
elif self.topo_name == "t1-28-lag":
config = self.generate_smartswitch_golden_config_db()
module_msg = module_msg + " for smartswitch"
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 @@ -270,7 +307,7 @@ def generate(self):
temp_file.write(config)
self.module.run_command("sudo rm -f {}".format(TEMP_DHCP_SERVER_CONFIG_PATH))
self.module.run_command("sudo rm -f {}".format(TEMP_SMARTSWITCH_CONFIG_PATH))
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