a2e3d2fcea
bring up chassisdb service on sonic switch according to the design in
Distributed Forwarding in VoQ Arch HLD
Signed-off-by: Honggang Xu <hxu@arista.com>
**- Why I did it**
To bring up new ChassisDB service in sonic as designed in ['Distributed forwarding in a VOQ architecture HLD' ](90c1289eaf/doc/chassis/architecture.md
).
**- How I did it**
Implement the section 2.3.1 Global DB Organization of the VOQ architecture HLD.
**- How to verify it**
ChassisDB service won't start without chassisdb.conf file on the existing platforms.
ChassisDB service is accessible with global.conf file in the distributed arichitecture.
Signed-off-by: Honggang Xu <hxu@arista.com>
68 lines
2.3 KiB
Python
Executable File
68 lines
2.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
import json
|
|
import os
|
|
import syslog
|
|
import argparse
|
|
|
|
database_config_file = "/var/run/redis/sonic-db/database_config.json"
|
|
redis_chassis = 'redis_chassis'
|
|
chassis_db = 'CHASSIS_APP_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]
|
|
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()
|