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)