github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/pulsar/scripts/merge_pulsar_config.py (about) 1 #!/usr/bin/env python3 2 3 import os, sys 4 5 6 def load_config_file(file): 7 lines = [] # List of config file lines 8 keys = {} # Map a key to its line number in the file 9 10 # Load conf file 11 for line in open(file): 12 lines.append(line) 13 line = line.strip() 14 if not line or line.startswith('#') or '=' not in line: 15 continue 16 try: 17 k, v = line.split('=', 1) 18 keys[k.strip()] = len(lines) - 1 19 except: 20 print("[%s] skip Processing %s" % (file, line)) 21 sys.exit(-1) 22 return lines, keys 23 24 25 def write_config_file(file, lines): 26 with open(file, 'w') as f: 27 for line in lines: 28 f.write(line) 29 30 31 def update_config_file(file, updated_keys, updated_lines): 32 lines, keys = load_config_file(file) 33 for key in updated_keys: 34 updated_line = updated_lines[updated_keys[key]].strip() 35 if key not in keys: 36 print('[%s] Adding config: %s' % (file, updated_line)) 37 lines.append('\n%s\n' % updated_line) 38 else: 39 print('[%s] Updating config %s' % (file, updated_line)) 40 lines[keys[key]] = '%s\n' % updated_line 41 return lines 42 43 44 def merge_config_files(dest_file, src_file): 45 lines, keys = load_config_file(src_file) 46 if len(keys) == 0: 47 return 48 write_config_file(dest_file, update_config_file(dest_file, keys, lines)) 49 50 51 if len(sys.argv) < 2: 52 print('Usage: %s <FILE> <FILE>' % (sys.argv[0])) 53 sys.exit(1) 54 55 # Always apply env config to env scripts as well 56 dst_files = sys.argv[1] 57 src_files = sys.argv[2] 58 59 merge_config_files(dst_files, src_files)