text: #!/usr/bin/env python3
  #
  # Licensed to the Apache Software Foundation (ASF) under one
  # or more contributor license agreements.  See the NOTICE file
  # distributed with this work for additional information
  # regarding copyright ownership.  The ASF licenses this file
  # to you under the Apache License, Version 2.0 (the
  # "License"); you may not use this file except in compliance
  # with the License.  You may obtain a copy of the License at
  #
  #   http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing,
  # software distributed under the License is distributed on an
  # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  # KIND, either express or implied.  See the License for the
  # specific language governing permissions and limitations
  # under the License.
  #
  
  ##
  ## Generate a yml from env.py
  ##
  ## ./gen-yml-from-env.py <template yml file> [<template yml file>]
  ##
  
  import os, sys
  import yaml
  
  INT_KEYS = [
      'workerPort',
      'numFunctionPackageReplicas',
      'failureCheckFreqMs',
      'rescheduleTimeoutMs',
      'initialBrokerReconnectMaxRetries',
      'assignmentWriteMaxRetries',
      'instanceLivenessCheckFreqMs'
  ]
  
  SET_KEYS = [
      'brokerInterceptors',
      'messagingProtocols',
      'tlsProtocols',
      'tlsCiphers',
      'authenticationProviders',
      'superUserRoles',
      'proxyRoles',
      'schemaRegistryCompatibilityCheckers',
      'brokerClientTlsCiphers',
      'brokerClientTlsProtocols',
      'webServiceTlsCiphers',
      'webServiceTlsProtocols',
  ]
  
  PF_ENV_PREFIX = 'PF_'
  
  if len(sys.argv) < 2:
      print('Usage: %s' % (sys.argv[0]))
      sys.exit(1)
  
  conf_files = sys.argv[1:]
  
  for conf_filename in conf_files:
      conf = yaml.load(open(conf_filename))
  
      # update the config
      modified = False
      for k in sorted(os.environ.keys()):
          if not k.startswith(PF_ENV_PREFIX):
              continue
  
          v = os.environ[k]
  
          k = k[len(PF_ENV_PREFIX):]
          key_parts = k.split('_')
  
          i = 0
          conf_to_modify = conf
          while i < len(key_parts):
              key_part = key_parts[i]
              if i == (len(key_parts) - 1):
                  if key_part in INT_KEYS:
                      conf_to_modify[key_part] = int(v)
                  elif key_part in SET_KEYS:
                      conf_to_modify[key_part] = v.split(',')
                  else:
                      conf_to_modify[key_part] = v
                  modified = True
              else:
                  if not key_part in conf_to_modify:
                      conf_to_modify[key_part] = {}
                  conf_to_modify = conf_to_modify[key_part]
                  modified = True
              i += 1
  
      containerFactory = os.environ.get('PF_containerFactory', None)
      conf.pop('containerFactory', None)
      if containerFactory == 'k8s':
          conf.pop('processContainerFactory', None)
          conf.pop('threadContainerFactory', None)
      elif containerFactory == 'process':
          conf.pop('kubernetesContainerFactory', None)
          conf.pop('threadContainerFactory', None)
      elif containerFactory == 'thread':
          conf.pop('kubernetesContainerFactory', None)
          conf.pop('processContainerFactory', None)
  
      # Store back the updated config in the same file
      f = open(conf_filename, 'w')
      yaml.dump(conf, f, default_flow_style=False)
      f.close()
  