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)
|