From b3f9135e5aa9fd04cc9f3cccc5382ac94584a559 Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Tue, 7 Nov 2023 13:08:57 +0200 Subject: [PATCH 1/9] Ovewrite files only if no infra files are already there --- .../generate/dedicated_cluster/aws.py | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/aws.py b/deployer/commands/generate/dedicated_cluster/aws.py index aeceaec7b3..5050086555 100644 --- a/deployer/commands/generate/dedicated_cluster/aws.py +++ b/deployer/commands/generate/dedicated_cluster/aws.py @@ -19,6 +19,22 @@ from .dedicated_cluster_app import dedicated_cluster_app +def infra_files_already_exist(cluster_name): + infra_files = { + "jsonnet_file_path": REPO_ROOT_PATH / "eksctl" / f"{cluster_name}.jsonnet", + "tfvars_file_path": ( + REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars" + ), + "ssh_key_file": REPO_ROOT_PATH + / "eksctl/ssh-keys/secret" + / f"{cluster_name}.key", + } + if any(os.path.exists(path) for path in infra_files.values()): + return True + + return False + + def generate_infra_files(vars): cluster_name = vars["cluster_name"] with open(REPO_ROOT_PATH / "eksctl/template.jsonnet") as f: @@ -42,7 +58,6 @@ def generate_infra_files(vars): print_colour("Generating the terraform infrastructure file...", "yellow") with open(REPO_ROOT_PATH / "terraform/aws/projects/template.tfvars") as f: tfvars_template = jinja2.Template(f.read()) - tfvars_file_path = ( REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars" ) @@ -87,9 +102,15 @@ def aws( cluster_region: str = typer.Option( ..., prompt="The region where to deploy the cluster" ), + force: bool = typer.Option( + False, + "--force", + help="Whether or not to force the override of the files that already exist", + ), ): """ - Automatically generate the files required to setup a new cluster on AWS + Automatically generate the files required to setup a new cluster on AWS if they don't exist. + Use --force to force existing configuration files to be overwritten by this command. """ # These are the variables needed by the templates used to generate the cluster config file @@ -100,10 +121,23 @@ def aws( "cluster_region": cluster_region, } + if infra_files_already_exist(cluster_name): + if not force: + print_colour( + f"Found existing infrastructure files for {cluster_name}. Use --force if you want to allow this script to overwrite them.", + "red", + ) + raise typer.Abort("blabla") + else: + print_colour( + f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", + "red", + ) + + # If we are here, then either no existing infrastructure files for this cluster have been found + # or the `--force` flag was provided and we can override existing files. generate_infra_files(vars) - # Automatically generate the config directory cluster_config_directory = generate_config_directory(vars) - # Generate the support files generate_support_files(cluster_config_directory, vars) From 705dea7b1b0ca345ff7ba9628a00bd24b9a8889f Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 13:20:45 +0200 Subject: [PATCH 2/9] Make the check existance func common --- .../generate/dedicated_cluster/aws.py | 35 ++++++++++--------- .../generate/dedicated_cluster/common.py | 8 +++++ 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/aws.py b/deployer/commands/generate/dedicated_cluster/aws.py index 5050086555..6407f737ef 100644 --- a/deployer/commands/generate/dedicated_cluster/aws.py +++ b/deployer/commands/generate/dedicated_cluster/aws.py @@ -15,24 +15,22 @@ from deployer.utils.file_acquisition import REPO_ROOT_PATH from deployer.utils.rendering import print_colour -from .common import generate_config_directory, generate_support_files +from .common import ( + generate_config_directory, + generate_support_files, + infra_files_already_exist, +) from .dedicated_cluster_app import dedicated_cluster_app -def infra_files_already_exist(cluster_name): - infra_files = { - "jsonnet_file_path": REPO_ROOT_PATH / "eksctl" / f"{cluster_name}.jsonnet", - "tfvars_file_path": ( - REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars" - ), - "ssh_key_file": REPO_ROOT_PATH - / "eksctl/ssh-keys/secret" - / f"{cluster_name}.key", - } - if any(os.path.exists(path) for path in infra_files.values()): - return True - - return False +def get_infra_files_to_be_created(cluster_name): + return [ + REPO_ROOT_PATH / "eksctl" / f"{cluster_name}.jsonnet", + (REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars"), + (REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key",), + REPO_ROOT_PATH / "config/clusters/templates/common/support.values.yaml", + REPO_ROOT_PATH / "config/clusters/templates/common/support.secret.values.yaml", + ] def generate_infra_files(vars): @@ -65,6 +63,7 @@ def generate_infra_files(vars): f.write(tfvars_template.render(**vars)) print_colour(f"{tfvars_file_path} created") + print_colour("Generate, encrypt and store the ssh private key...", "yellow") subprocess.check_call( [ "ssh-keygen", @@ -82,15 +81,17 @@ def generate_infra_files(vars): f"{REPO_ROOT_PATH}/eksctl/ssh-keys/secret/{cluster_name}.key", ) + ssh_key_file = REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key" # Encrypt the private key subprocess.check_call( [ "sops", "--in-place", "--encrypt", - f"{REPO_ROOT_PATH}/eksctl/ssh-keys/secret/{cluster_name}.key", + ssh_key_file, ] ) + print_colour(f"{ssh_key_file} created") @dedicated_cluster_app.command() @@ -121,7 +122,7 @@ def aws( "cluster_region": cluster_region, } - if infra_files_already_exist(cluster_name): + if infra_files_already_exist(get_infra_files_to_be_created, cluster_name): if not force: print_colour( f"Found existing infrastructure files for {cluster_name}. Use --force if you want to allow this script to overwrite them.", diff --git a/deployer/commands/generate/dedicated_cluster/common.py b/deployer/commands/generate/dedicated_cluster/common.py index aaed0f2298..7837cf106f 100644 --- a/deployer/commands/generate/dedicated_cluster/common.py +++ b/deployer/commands/generate/dedicated_cluster/common.py @@ -9,6 +9,14 @@ from deployer.utils.rendering import print_colour +def infra_files_already_exist(get_infra_files_func, cluster_name): + infra_files = get_infra_files_func(cluster_name) + if any(os.path.exists(path) for path in infra_files): + return True + + return False + + def generate_cluster_config_file(cluster_config_directory, provider, vars): """ Generates the `config//cluster.yaml` config From e0664c9c038e30b8f7a08873663d220b4e4c342d Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 13:41:22 +0200 Subject: [PATCH 3/9] Correct the path of the files --- deployer/commands/generate/dedicated_cluster/aws.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/aws.py b/deployer/commands/generate/dedicated_cluster/aws.py index 6407f737ef..26a5f51ecb 100644 --- a/deployer/commands/generate/dedicated_cluster/aws.py +++ b/deployer/commands/generate/dedicated_cluster/aws.py @@ -26,10 +26,13 @@ def get_infra_files_to_be_created(cluster_name): return [ REPO_ROOT_PATH / "eksctl" / f"{cluster_name}.jsonnet", - (REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars"), - (REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key",), - REPO_ROOT_PATH / "config/clusters/templates/common/support.values.yaml", - REPO_ROOT_PATH / "config/clusters/templates/common/support.secret.values.yaml", + REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars", + REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key", + REPO_ROOT_PATH + / "config/clusters/" + / cluster_name + / "enc-support.secret.values.yaml", + REPO_ROOT_PATH / "config/clusters" / cluster_name / "cluster.yaml", ] From 0b6485f9635c5f67feba5d16e8e92a6ffca3656f Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 14:00:50 +0200 Subject: [PATCH 4/9] Move force check into common --- .../generate/dedicated_cluster/aws.py | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/aws.py b/deployer/commands/generate/dedicated_cluster/aws.py index 26a5f51ecb..870e5e39a3 100644 --- a/deployer/commands/generate/dedicated_cluster/aws.py +++ b/deployer/commands/generate/dedicated_cluster/aws.py @@ -15,11 +15,7 @@ from deployer.utils.file_acquisition import REPO_ROOT_PATH from deployer.utils.rendering import print_colour -from .common import ( - generate_config_directory, - generate_support_files, - infra_files_already_exist, -) +from .common import force_overwrite, generate_config_directory, generate_support_files from .dedicated_cluster_app import dedicated_cluster_app @@ -29,7 +25,7 @@ def get_infra_files_to_be_created(cluster_name): REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars", REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key", REPO_ROOT_PATH - / "config/clusters/" + / "config/clusters" / cluster_name / "enc-support.secret.values.yaml", REPO_ROOT_PATH / "config/clusters" / cluster_name / "cluster.yaml", @@ -125,18 +121,8 @@ def aws( "cluster_region": cluster_region, } - if infra_files_already_exist(get_infra_files_to_be_created, cluster_name): - if not force: - print_colour( - f"Found existing infrastructure files for {cluster_name}. Use --force if you want to allow this script to overwrite them.", - "red", - ) - raise typer.Abort("blabla") - else: - print_colour( - f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", - "red", - ) + if not force_overwrite(get_infra_files_to_be_created, cluster_name, force): + raise typer.Abort() # If we are here, then either no existing infrastructure files for this cluster have been found # or the `--force` flag was provided and we can override existing files. From 66284d4bd1f9597f90405d2de16299e136dc17f8 Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 14:01:25 +0200 Subject: [PATCH 5/9] Check force overwrite of files on gcp also --- .../generate/dedicated_cluster/common.py | 21 +++++++++++++- .../generate/dedicated_cluster/gcp.py | 29 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/common.py b/deployer/commands/generate/dedicated_cluster/common.py index 7837cf106f..57c2680bad 100644 --- a/deployer/commands/generate/dedicated_cluster/common.py +++ b/deployer/commands/generate/dedicated_cluster/common.py @@ -17,16 +17,35 @@ def infra_files_already_exist(get_infra_files_func, cluster_name): return False +def force_overwrite(get_infra_files_func, cluster_name, force): + if infra_files_already_exist(get_infra_files_func, cluster_name): + if not force: + print_colour( + f"Found existing infrastructure files for cluster {cluster_name}. Use --force if you want to allow this script to overwrite them.", + "red", + ) + return False + else: + print_colour( + f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", + "red", + ) + return True + + def generate_cluster_config_file(cluster_config_directory, provider, vars): """ Generates the `config//cluster.yaml` config """ + print_colour("Generating the cluster.yaml config file...", "yellow") with open( REPO_ROOT_PATH / f"config/clusters/templates/{provider}/cluster.yaml" ) as f: cluster_yaml_template = jinja2.Template(f.read()) - with open(cluster_config_directory / "cluster.yaml", "w") as f: + cluster_yaml_file = cluster_config_directory / "cluster.yaml" + with open(cluster_yaml_file, "w") as f: f.write(cluster_yaml_template.render(**vars)) + print_colour(f"{cluster_yaml_file} created") def generate_support_files(cluster_config_directory, vars): diff --git a/deployer/commands/generate/dedicated_cluster/gcp.py b/deployer/commands/generate/dedicated_cluster/gcp.py index 4efd394a80..979b2ac2f3 100644 --- a/deployer/commands/generate/dedicated_cluster/gcp.py +++ b/deployer/commands/generate/dedicated_cluster/gcp.py @@ -17,6 +17,7 @@ from deployer.utils.rendering import print_colour from .common import ( + force_overwrite, generate_cluster_config_file, generate_config_directory, generate_support_files, @@ -24,6 +25,18 @@ from .dedicated_cluster_app import dedicated_cluster_app +def get_infra_files_to_be_created(cluster_name): + return [ + REPO_ROOT_PATH / "terraform/gcp/projects" / f"{cluster_name}.tfvars", + REPO_ROOT_PATH / "config/clusters" / cluster_name / "support.values.yaml", + REPO_ROOT_PATH + / "config/clusters" + / cluster_name + / "enc-support.secret.values.yaml", + REPO_ROOT_PATH / "config/clusters" / cluster_name / "cluster.yaml", + ] + + def generate_terraform_file(vars): """ Generates the `terraform/gcp/projects/.tfvars` terraform file @@ -63,9 +76,17 @@ def gcp( hub_type: Annotated[ str, typer.Option(prompt="Please insert the hub type of the first hub") ] = "basehub", + force: Annotated[ + bool, + typer.Option( + "--force", + help="Whether or not to force the override of the files that already exist", + ), + ] = False, ): """ - Automatically generates the initial files, required to setup a new cluster on GCP + Automatically generates the initial files, required to setup a new cluster on GCP if they don't exist. + Use --force to force existing configuration files to be overwritten by this command. """ # These are the variables needed by the templates used to generate the cluster config file # and support files @@ -77,6 +98,12 @@ def gcp( "hub_name": hub_name, } + if not force_overwrite(get_infra_files_to_be_created, cluster_name, force): + raise typer.Abort() + + # If we are here, then either no existing infrastructure files for this cluster have been found + # or the `--force` flag was provided and we can override existing files. + # Automatically generate the terraform config file generate_terraform_file(vars) From b098fa55c273cedff1f7d3a4369df423d7b030f8 Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 17:52:09 +0200 Subject: [PATCH 6/9] Group all checks under a common command --- .../generate/dedicated_cluster/aws.py | 13 +++- .../generate/dedicated_cluster/common.py | 75 +++++++++++++++---- .../generate/dedicated_cluster/gcp.py | 6 +- requirements.txt | 5 +- 4 files changed, 78 insertions(+), 21 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/aws.py b/deployer/commands/generate/dedicated_cluster/aws.py index 870e5e39a3..a97a5bd343 100644 --- a/deployer/commands/generate/dedicated_cluster/aws.py +++ b/deployer/commands/generate/dedicated_cluster/aws.py @@ -15,7 +15,11 @@ from deployer.utils.file_acquisition import REPO_ROOT_PATH from deployer.utils.rendering import print_colour -from .common import force_overwrite, generate_config_directory, generate_support_files +from .common import ( + check_before_continuing_with_generate_command, + generate_config_directory, + generate_support_files, +) from .dedicated_cluster_app import dedicated_cluster_app @@ -24,6 +28,7 @@ def get_infra_files_to_be_created(cluster_name): REPO_ROOT_PATH / "eksctl" / f"{cluster_name}.jsonnet", REPO_ROOT_PATH / "terraform/aws/projects" / f"{cluster_name}.tfvars", REPO_ROOT_PATH / "eksctl/ssh-keys/secret" / f"{cluster_name}.key", + REPO_ROOT_PATH / "config/clusters" / cluster_name / "support.values.yaml", REPO_ROOT_PATH / "config/clusters" / cluster_name @@ -112,16 +117,18 @@ def aws( Automatically generate the files required to setup a new cluster on AWS if they don't exist. Use --force to force existing configuration files to be overwritten by this command. """ - # These are the variables needed by the templates used to generate the cluster config file # and support files + vars = { "cluster_name": cluster_name, "hub_type": hub_type, "cluster_region": cluster_region, } - if not force_overwrite(get_infra_files_to_be_created, cluster_name, force): + if not check_before_continuing_with_generate_command( + get_infra_files_to_be_created, cluster_name, force + ): raise typer.Abort() # If we are here, then either no existing infrastructure files for this cluster have been found diff --git a/deployer/commands/generate/dedicated_cluster/common.py b/deployer/commands/generate/dedicated_cluster/common.py index 57c2680bad..e7cf71504d 100644 --- a/deployer/commands/generate/dedicated_cluster/common.py +++ b/deployer/commands/generate/dedicated_cluster/common.py @@ -4,32 +4,77 @@ import subprocess import jinja2 +from git import Repo from deployer.utils.file_acquisition import REPO_ROOT_PATH from deployer.utils.rendering import print_colour -def infra_files_already_exist(get_infra_files_func, cluster_name): - infra_files = get_infra_files_func(cluster_name) - if any(os.path.exists(path) for path in infra_files): - return True +def check_force_overwrite(cluster_name, force): + """ + Check if the force flag is present and print relevant messages to stdout. + If the --force flag was False, return False, otherwise, return True. + """ + if not force: + print_colour( + f"Found existing infrastructure files for cluster {cluster_name}. Use --force if you want to allow this script to overwrite them.", + "red", + ) + return False - return False + print_colour( + f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", + "red", + ) + + return True -def force_overwrite(get_infra_files_func, cluster_name, force): - if infra_files_already_exist(get_infra_files_func, cluster_name): - if not force: +def check_git_status_clean(infra_files): + """ + Check if running `git status` doesn't return any file that the generate command should create/update. + If any of the files in `infra_files` (the files that the script will generate) are in the `git status` output, + then return False, otherwise True. + """ + repo = Repo(REPO_ROOT_PATH) + status = repo.git.status("--porcelain") + list_of_modified_files = status.split("\n") + + for file in list_of_modified_files: + file = file.lstrip("?? ") if file.startswith("?? ") else file.lstrip(" M ") + full_filepath = REPO_ROOT_PATH / file + if full_filepath in infra_files: print_colour( - f"Found existing infrastructure files for cluster {cluster_name}. Use --force if you want to allow this script to overwrite them.", - "red", + f"{full_filepath} was not comitted. Commit or restore the file in order to proceed with the generation.", + "yellow", ) return False - else: - print_colour( - f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", - "red", - ) + return True + + +def check_before_continuing_with_generate_command( + get_infra_files_func, cluster_name, force +): + """ + This function does a sanity check of the current state of infrastructure files of the desired cluster. + These checks will then be used to decide if the functions generating the files will be ran. + + The checks are: + 1. if any of the files that will be generated are found in the `git status` output, then return False + 2. else, if none of the infrastructure files that the script will generate exist, then return True + 3. else, if there are infrastructure files that already exist and the --force flag was not used, then return False + $. Otherwise, return True + """ + infra_files = get_infra_files_func(cluster_name) + if not check_git_status_clean(infra_files): + return False + + if not (any(os.path.exists(path) for path in infra_files)): + return True + + if not check_force_overwrite(cluster_name, force): + return False + return True diff --git a/deployer/commands/generate/dedicated_cluster/gcp.py b/deployer/commands/generate/dedicated_cluster/gcp.py index 979b2ac2f3..36ae0e8e9e 100644 --- a/deployer/commands/generate/dedicated_cluster/gcp.py +++ b/deployer/commands/generate/dedicated_cluster/gcp.py @@ -17,7 +17,7 @@ from deployer.utils.rendering import print_colour from .common import ( - force_overwrite, + check_before_continuing_with_generate_command, generate_cluster_config_file, generate_config_directory, generate_support_files, @@ -98,7 +98,9 @@ def gcp( "hub_name": hub_name, } - if not force_overwrite(get_infra_files_to_be_created, cluster_name, force): + if not check_before_continuing_with_generate_command( + get_infra_files_to_be_created, cluster_name, force + ): raise typer.Abort() # If we are here, then either no existing infrastructure files for this cluster have been found diff --git a/requirements.txt b/requirements.txt index b52e4d7264..bbc16c1d57 100644 --- a/requirements.txt +++ b/requirements.txt @@ -35,8 +35,11 @@ google-cloud-bigquery==3.13.* google-cloud-bigquery[pandas]==3.13.* gspread==5.12.* -# requests is used by deployer/cilogon_app.py +# requests is used by deployer/commands/cilogon.py requests==2.* +# this is used by the generator of dedicated cluster files deployer/commands/dedicated_cluster +GitPython + # Used to parse units that kubernetes understands (like GiB) kubernetes \ No newline at end of file From df2bf91a7d5b72af1b4d5f6d14d095e3a776d8ee Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 17:53:33 +0200 Subject: [PATCH 7/9] pin gitpython --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bbc16c1d57..cfa5713645 100644 --- a/requirements.txt +++ b/requirements.txt @@ -39,7 +39,7 @@ gspread==5.12.* requests==2.* # this is used by the generator of dedicated cluster files deployer/commands/dedicated_cluster -GitPython +GitPython==3.1.40 # Used to parse units that kubernetes understands (like GiB) kubernetes \ No newline at end of file From 06d9677e49cdea70c9ab3411a392972c2fcfcd58 Mon Sep 17 00:00:00 2001 From: Georgiana Dolocan Date: Thu, 9 Nov 2023 17:59:35 +0200 Subject: [PATCH 8/9] Rm uneeded func --- .../generate/dedicated_cluster/common.py | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/deployer/commands/generate/dedicated_cluster/common.py b/deployer/commands/generate/dedicated_cluster/common.py index e7cf71504d..0c93b5fca5 100644 --- a/deployer/commands/generate/dedicated_cluster/common.py +++ b/deployer/commands/generate/dedicated_cluster/common.py @@ -10,26 +10,6 @@ from deployer.utils.rendering import print_colour -def check_force_overwrite(cluster_name, force): - """ - Check if the force flag is present and print relevant messages to stdout. - If the --force flag was False, return False, otherwise, return True. - """ - if not force: - print_colour( - f"Found existing infrastructure files for cluster {cluster_name}. Use --force if you want to allow this script to overwrite them.", - "red", - ) - return False - - print_colour( - f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", - "red", - ) - - return True - - def check_git_status_clean(infra_files): """ Check if running `git status` doesn't return any file that the generate command should create/update. @@ -72,9 +52,17 @@ def check_before_continuing_with_generate_command( if not (any(os.path.exists(path) for path in infra_files)): return True - if not check_force_overwrite(cluster_name, force): + if not force: + print_colour( + f"Found existing infrastructure files for cluster {cluster_name}. Use --force if you want to allow this script to overwrite them.", + "red", + ) return False + print_colour( + f"Attention! Found existing infrastructure files for {cluster_name}. They will be overwritten by the --force flag!", + "red", + ) return True From 0b2f81a1bd9d710a436e662e9fde7950459d6343 Mon Sep 17 00:00:00 2001 From: Georgiana Date: Fri, 10 Nov 2023 12:42:19 +0200 Subject: [PATCH 9/9] Fix typo Co-authored-by: Sarah Gibson <44771837+sgibson91@users.noreply.github.com> --- deployer/commands/generate/dedicated_cluster/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployer/commands/generate/dedicated_cluster/common.py b/deployer/commands/generate/dedicated_cluster/common.py index 0c93b5fca5..bfe32c97da 100644 --- a/deployer/commands/generate/dedicated_cluster/common.py +++ b/deployer/commands/generate/dedicated_cluster/common.py @@ -25,7 +25,7 @@ def check_git_status_clean(infra_files): full_filepath = REPO_ROOT_PATH / file if full_filepath in infra_files: print_colour( - f"{full_filepath} was not comitted. Commit or restore the file in order to proceed with the generation.", + f"{full_filepath} was not committed. Commit or restore the file in order to proceed with the generation.", "yellow", ) return False