mirror of
				https://github.com/Telecominfraproject/ols-nos.git
				synced 2025-10-31 10:07:49 +00:00 
			
		
		
		
	 cfcf30570b
			
		
	
	cfcf30570b
	
	
	
		
			
			[build_debian] Generate checksum of ASIC config files * Adds script to generate checksums for ASIC config files * Adds step to build_debian that copies ASIC config checksum into SONiC filesystem Signed-off-by: Danny Allen daall@microsoft.com
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| import syslog
 | |
| import os
 | |
| import hashlib
 | |
| 
 | |
| SYSLOG_IDENTIFIER = 'asic_config_checksum'
 | |
| 
 | |
| CHUNK_SIZE = 8192
 | |
| 
 | |
| CONFIG_FILES = {
 | |
|     os.path.abspath('./src/sonic-swss/swssconfig/sample/'): ['netbouncer.json', '00-copp.config.json']
 | |
| }
 | |
| 
 | |
| OUTPUT_FILE = os.path.abspath('./asic_config_checksum')
 | |
| 
 | |
| def log_info(msg):
 | |
|     syslog.openlog(SYSLOG_IDENTIFIER)
 | |
|     syslog.syslog(syslog.LOG_INFO, msg)
 | |
|     syslog.closelog()
 | |
| 
 | |
| def log_error(msg):
 | |
|     syslog.openlog(SYSLOG_IDENTIFIER)
 | |
|     syslog.syslog(syslog.LOG_ERR, msg)
 | |
|     syslog.closelog()
 | |
| 
 | |
| def get_config_files(config_file_map):
 | |
|     '''
 | |
|     Generates a list of absolute paths to ASIC config files.
 | |
|     '''
 | |
|     config_files = []
 | |
|     for path, files in config_file_map.items():
 | |
|         for config_file in files:
 | |
|             config_files.append(os.path.join(path, config_file))
 | |
|     return config_files
 | |
| 
 | |
| def generate_checksum(checksum_files):
 | |
|     '''
 | |
|     Generates a checksum for a given list of files. Returns None if an error
 | |
|     occurs while reading the files.
 | |
|     
 | |
|     NOTE: The checksum is performed in the order provided. This function does 
 | |
|     NOT do any re-ordering of the files before creating the checksum.
 | |
|     '''
 | |
|     checksum = hashlib.sha1()
 | |
|     for checksum_file in checksum_files:
 | |
|         try:
 | |
|             with open(checksum_file, 'r') as f:
 | |
|                 for chunk in iter(lambda: f.read(CHUNK_SIZE), b""):
 | |
|                     checksum.update(chunk)
 | |
|         except IOError as e:
 | |
|             log_error('Error processing ASIC config file ' + checksum_file + ':' + e.strerror)
 | |
|             return None
 | |
| 
 | |
|     return checksum.hexdigest()
 | |
| 
 | |
| def main():
 | |
|     config_files = sorted(get_config_files(CONFIG_FILES))
 | |
|     checksum = generate_checksum(config_files)
 | |
|     if checksum == None:
 | |
|         exit(1)
 | |
| 
 | |
|     with open(OUTPUT_FILE, 'w') as output:
 | |
|         output.write(checksum + '\n')
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |