Commit 6f8b2f9c authored by Alexander Lercher's avatar Alexander Lercher

Merge branch 'feature/build-individual-images' into develop

parents ee159e16 3b02443e
......@@ -2,14 +2,16 @@ import os
import shutil
import sys
# if len(sys.argv) != 2:
# raise Exception("Push to Docker Hub will not work, please provide username as argument")
DOCKER_COMPOSE_NAME = "Dockerfile"
ROOT = './'
SOURCEPATH = f'{ROOT}src/'
DOCKER_USERNAME = "alexx882"
p_image_name = None
if len(sys.argv) == 2:
# parameter contains image to build
p_image_name = sys.argv[1]
paths = []
for r, _, f in os.walk(SOURCEPATH):
for filename in f:
......@@ -21,6 +23,9 @@ command_args = [{'path': path,
for path
in paths]
if p_image_name is not None:
command_args = [x for x in command_args if x['name']==p_image_name]
error:int = 0
res_str = []
for command_arg in command_args:
......
import os
import sys
# apply or delete config
kube_command = 'apply'
if len(sys.argv) == 2:
kube_command = sys.argv[1]
def print_help():
print("""
Use this script to apply or delete Kubernetes deployments and services.
paths = []
for p, _, f in os.walk('./'):
Parameters: [deploy|delete|redeploy [microservice_name]]
deploy ... applies all deployments and services from files
delete ... deletes all deployments and services from files
redeploy ... deletes and applies all microservices without deleting the database deployments
microservice_name ... only apply/delete for one microservice
""")
def get_microservice_name_from_path(path) -> str:
'''
Extracts the microservice name from the path.
:param path: The path, eg. src\data-hub\stage-discovery-microservice\deployment
'''
name = path.split(os.path.normpath('/'))[-2]
if 'microservice' in name:
name = '-'.join(name.split('-')[:-1])
return name
def update_deployments_from_file(kube_command, paths, del_db=True) -> int:
'''
Applies the kube_command to all paths.
Returns >0 if at least one error occured.
:param kube_command: The command to use for kubectl
:param paths: The list of paths to apply the kubectl command for
:param del_db: Also remove the corresponding db for the microservice
:returns: >0, if an error occured
'''
exit_val = 0
for path in paths:
if del_db:
exit_val += os.system(f"kubectl {kube_command} -f {path}")
else:
# use the single delete command to keep database (which is in same file)
exit_val += delete_deployment(get_microservice_name_from_path(path))
return exit_val
def delete_deployment(name) -> int:
'''Delete a single deployment by name.'''
exit_val = os.system(f"kubectl delete deployment {name}")
return exit_val
if __name__ == '__main__':
deployment_file_paths = []
for p, _, f in os.walk('./'):
for file in f:
if 'deployment.yml' == file:
paths.append(os.path.normpath(p))
deployment_file_paths.append(os.path.normpath(p))
command = sys.argv[1] if len(sys.argv) > 1 else 'deploy'
if command == 'help':
print_help()
sys.exit(0)
img_name = None
if len(sys.argv) > 2:
img_name = sys.argv[2]
deployment_file_paths = [p for p in deployment_file_paths if (img_name in p)]
error_val = 0
if command == 'delete' or command == 'redeploy':
error_val += update_deployments_from_file('delete', deployment_file_paths, command=='delete')
if command == 'deploy' or command == 'redeploy':
error_val += update_deployments_from_file('apply', deployment_file_paths)
error:int = 0
for path in paths:
exit_val = os.system(f"kubectl {kube_command} -f {path}")
if exit_val != 0:
error = exit_val
sys.exit(1 if error > 0 else 0)
\ No newline at end of file
sys.exit(1 if error_val > 0 else 0)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment