#!/usr/bin/python3 import argparse import json import os import syslog database_config_file = "/var/run/redis/sonic-db/database_config.json" redis_chassis = 'redis_chassis' chassis_db_list = ['CHASSIS_APP_DB', 'CHASSIS_STATE_DB'] def main(): parser = argparse.ArgumentParser(description="Update chassis_db config from database-config.json") parser.add_argument("-j", "--json", help="databse-config json file", nargs='?', const=database_config_file) parser.add_argument("-p", "--port", help="update port number", nargs='?') group = parser.add_mutually_exclusive_group() group.add_argument("-k", "--keep", help="keep configuration", action='store_true') group.add_argument("-d", "--delete", help="delete configuration", action='store_true') args = parser.parse_args() jsonfile = "" if args.json != None: jsonfile = args.json else: return if args.port != None: port_number = args.port else: port_number = "" if args.keep: keep_config = True else: keep_config = False if args.delete: delete_config = True else: delete_config = False data = {} data_keep = {} if os.path.isfile(jsonfile): with open(jsonfile, "r") as read_file: data = json.load(read_file) else: syslog.syslog(syslog.LOG_ERR, 'config file {} does notexist'.format(jsonfile)) return if 'INSTANCES' in data and redis_chassis in data['INSTANCES']: data_keep['INSTANCES'] = {} data_keep['INSTANCES'][redis_chassis] = data['INSTANCES'][redis_chassis] if delete_config: del data['INSTANCES'][redis_chassis] for chassis_db in chassis_db_list: if 'DATABASES' in data and chassis_db in data['DATABASES']: data_keep['DATABASES'] = {} data_keep['DATABASES'][chassis_db] = data['DATABASES'][chassis_db] if delete_config: del data['DATABASES'][chassis_db] with open(jsonfile, "w") as write_file: data_publish = data_keep if keep_config else data if port_number: data_publish['INSTANCES']['redis_chassis']['port'] = int(port_number) json.dump(data_publish, write_file, indent=4, separators=(',', ': ')) syslog.syslog(syslog.LOG_INFO, 'remove chassis_db from config file {}'.format(jsonfile)) if __name__ == "__main__": main()