mirror of https://github.com/apache/kafka.git
				
				
				
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python
 | 
						|
 | 
						|
# 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.
 | 
						|
 | 
						|
"""
 | 
						|
Python script to prepare the hardcoded source folder for the docker official image
 | 
						|
This script is used to prepare the source folder for the docker official image
 | 
						|
 | 
						|
Usage:
 | 
						|
    prepare_docker_official_image_source.py --help
 | 
						|
        Get detailed description of each option
 | 
						|
 | 
						|
    Example command:-
 | 
						|
        prepare_docker_official_image_source.py --image-type <image_type> --kafka-version <kafka_version>
 | 
						|
 | 
						|
        This command will build a directory with the name as <kafka_version> housing the hardcoded static Dockerfile and scripts for 
 | 
						|
        the docker official image, <image_type> as image type (jvm by default), <kafka_version> for the kafka version for which the 
 | 
						|
        image is being built.
 | 
						|
"""
 | 
						|
 | 
						|
from datetime import date
 | 
						|
import argparse
 | 
						|
from distutils.dir_util import copy_tree
 | 
						|
import os
 | 
						|
import shutil
 | 
						|
import re
 | 
						|
 | 
						|
 | 
						|
def remove_args_and_hardcode_values(file_path, kafka_version, kafka_url):
 | 
						|
    with open(file_path, 'r') as file:
 | 
						|
        filedata = file.read()
 | 
						|
    filedata = filedata.replace("ARG kafka_url", f"ENV kafka_url {kafka_url}")
 | 
						|
    filedata = filedata.replace(
 | 
						|
        "ARG build_date", f"ENV build_date {str(date.today())}")
 | 
						|
    original_comment = re.compile(r"# Get kafka from https://archive.apache.org/dist/kafka and pass the url through build arguments")
 | 
						|
    updated_comment = f"# Get Kafka from https://archive.apache.org/dist/kafka, url passed as env var, for version {kafka_version}"
 | 
						|
    filedata = original_comment.sub(updated_comment, filedata)
 | 
						|
    with open(file_path, 'w') as file:
 | 
						|
        file.write(filedata)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    parser = argparse.ArgumentParser()
 | 
						|
    parser.add_argument("--image-type", "-type", choices=[
 | 
						|
                        "jvm"], default="jvm", dest="image_type", help="Image type you want to build")
 | 
						|
    parser.add_argument("--kafka-version", "-v", dest="kafka_version",
 | 
						|
                        help="Kafka version for which the source for docker official image is to be built")
 | 
						|
    args = parser.parse_args()
 | 
						|
    kafka_url = f"https://archive.apache.org/dist/kafka/{args.kafka_version}/kafka_2.13-{args.kafka_version}.tgz"
 | 
						|
    current_dir = os.path.dirname(os.path.realpath(__file__))
 | 
						|
    new_dir = os.path.join(
 | 
						|
        current_dir, f'docker_official_images', args.kafka_version)
 | 
						|
    if os.path.exists(new_dir):
 | 
						|
        shutil.rmtree(new_dir)
 | 
						|
    os.makedirs(new_dir)
 | 
						|
    copy_tree(os.path.join(current_dir, args.image_type), os.path.join(new_dir, args.kafka_version, args.image_type))
 | 
						|
    copy_tree(os.path.join(current_dir, 'resources'), os.path.join(new_dir, args.kafka_version, args.image_type, 'resources'))
 | 
						|
    remove_args_and_hardcode_values(
 | 
						|
        os.path.join(new_dir, args.kafka_version, args.image_type, 'Dockerfile'), args.kafka_version, kafka_url)
 |