Skip to content

Commit cf98a37

Browse files
committed
use hashed preview id to pass the k8s namespace name restriction
1 parent 6ae600f commit cf98a37

3 files changed

Lines changed: 47 additions & 43 deletions

File tree

gitopscli/commands/create_pr_preview.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,49 +58,49 @@ def create_pr_preview_command(
5858
git_provider_url,
5959
git_hash,
6060
preview_id,
61-
deployment_replaced(parent_id, pr_id),
62-
deployment_exist(parent_id, pr_id, pr_branch),
63-
deployment_new(parent_id, pr_id, pr_branch),
61+
create_deployment_replaced_callback(parent_id, pr_id),
62+
create_deployment_exist_callback(parent_id, pr_id, pr_branch),
63+
create_deployment_new_callback(parent_id, pr_id, pr_branch),
6464
)
6565
finally:
6666
delete_tmp_dir(apps_tmp_dir)
6767
delete_tmp_dir(root_tmp_dir)
6868

6969

70-
def deployment_replaced(parent_id, pr_id):
71-
def inner_func(apps_git, new_image_tag):
70+
def create_deployment_replaced_callback(parent_id, pr_id):
71+
def deployment_replaced_callback(apps_git, new_image_tag):
7272
logging.info("The image tag %s has already been deployed. Doing nothing.", new_image_tag)
7373
pr_comment_text = f"""
7474
The version `{new_image_tag}` has already been deployed. Nothing to do here.
7575
"""
7676
logging.info("Creating PullRequest comment for pr with id %s and content: %s", pr_id, pr_comment_text)
7777
apps_git.add_pull_request_comment(pr_id, pr_comment_text, parent_id)
7878

79-
return inner_func
79+
return deployment_replaced_callback
8080

8181

82-
def deployment_new(parent_id, pr_id, pr_branch):
83-
def inner_func(apps_git, gitops_config, route_host):
82+
def create_deployment_new_callback(parent_id, pr_id, pr_branch):
83+
def deployment_new_callback(apps_git, gitops_config, route_host):
8484
pr_comment_text = f"""
8585
New preview environment for `{gitops_config.application_name}` and branch `{pr_branch}` created successfully. Access it here:
8686
https://{route_host}
8787
"""
8888
logging.info("Creating PullRequest comment for pr with id %s and content: %s", pr_id, pr_comment_text)
8989
apps_git.add_pull_request_comment(pr_id, pr_comment_text, parent_id)
9090

91-
return inner_func
91+
return deployment_new_callback
9292

9393

94-
def deployment_exist(parent_id, pr_id, pr_branch):
95-
def inner_func(apps_git, gitops_config, route_host):
94+
def create_deployment_exist_callback(parent_id, pr_id, pr_branch):
95+
def deployment_exist_callback(apps_git, gitops_config, route_host):
9696
pr_comment_text = f"""
9797
Preview environment for `{gitops_config.application_name}` and branch `{pr_branch}` updated successfully. Access it here:
9898
https://{route_host}
9999
"""
100100
logging.info("Creating PullRequest comment for pr with id %s and content: %s", pr_id, pr_comment_text)
101101
apps_git.add_pull_request_comment(pr_id, pr_comment_text, parent_id)
102102

103-
return inner_func
103+
return deployment_exist_callback
104104

105105

106106
def __create_pullrequest(branch, gitops_config, root_git):

gitopscli/commands/create_preview.py

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import hashlib
12
import logging
23
import os
34
import shutil
@@ -8,25 +9,25 @@
89
from gitopscli.io.tmp_dir import create_tmp_dir, delete_tmp_dir
910
from gitopscli.gitops_exception import GitOpsException
1011

12+
1113
# pylint: disable=too-many-statements
1214

1315

1416
def create_preview_command(
15-
username,
16-
password,
17-
git_user,
18-
git_email,
19-
organisation,
20-
repository_name,
21-
git_provider,
22-
git_provider_url,
23-
git_hash,
24-
preview_id,
25-
deployment_replaced=None,
26-
deployment_exists=None,
27-
deployment_new=None,
17+
username,
18+
password,
19+
git_user,
20+
git_email,
21+
organisation,
22+
repository_name,
23+
git_provider,
24+
git_provider_url,
25+
git_hash,
26+
preview_id,
27+
deployment_replaced_callback=None,
28+
deployment_exists_callback=None,
29+
deployment_new_callback=None,
2830
):
29-
3031
apps_tmp_dir = create_tmp_dir()
3132
root_tmp_dir = create_tmp_dir()
3233

@@ -72,7 +73,8 @@ def create_preview_command(
7273
else:
7374
raise GitOpsException(f"The preview template folder does not exist: {preview_template_folder_name}")
7475

75-
new_preview_folder_name = gitops_config.application_name + "-" + preview_id + "-preview"
76+
hashed_preview_id = hashlib.sha256(preview_id.encode("utf-8")).hexdigest()[:8]
77+
new_preview_folder_name = gitops_config.application_name + "-" + hashed_preview_id + "-preview"
7678
logging.info("New folder for preview: %s", new_preview_folder_name)
7779
branch_preview_env_already_exist = os.path.isdir(root_git.get_full_file_path(new_preview_folder_name))
7880
logging.info("Is preview env already existing for branch? %s", branch_preview_env_already_exist)
@@ -100,16 +102,16 @@ def create_preview_command(
100102
value_replaced,
101103
)
102104
if not value_replaced:
103-
if deployment_replaced:
104-
deployment_replaced(apps_git, new_image_tag)
105+
if deployment_replaced_callback:
106+
deployment_replaced_callback(apps_git, new_image_tag)
105107
return
106108

107109
if branch_preview_env_already_exist:
108-
if deployment_exists:
109-
deployment_exists(apps_git, gitops_config, route_host)
110+
if deployment_exists_callback:
111+
deployment_exists_callback(apps_git, gitops_config, route_host)
110112
else:
111-
if deployment_new:
112-
deployment_new(apps_git, gitops_config, route_host)
113+
if deployment_new_callback:
114+
deployment_new_callback(apps_git, gitops_config, route_host)
113115

114116
root_git.commit(f"Update preview environment for '{gitops_config.application_name}' and git hash '{git_hash}'.")
115117
root_git.push(config_branch)
@@ -120,14 +122,14 @@ def create_preview_command(
120122

121123

122124
def __replace_value(
123-
gitops_config,
124-
new_image_tag,
125-
new_preview_folder_name,
126-
replacement,
127-
root_git,
128-
route_host,
129-
shortened_branch_hash,
130-
value_replaced,
125+
gitops_config,
126+
new_image_tag,
127+
new_preview_folder_name,
128+
replacement,
129+
root_git,
130+
route_host,
131+
shortened_branch_hash,
132+
value_replaced,
131133
):
132134
replacement_value = None
133135
logging.info("Replacement: %s", replacement)
@@ -152,7 +154,7 @@ def __replace_value(
152154

153155

154156
def __create_new_preview_env(
155-
git_hash, new_preview_folder_name, preview_template_folder_name, root_git, app_name,
157+
git_hash, new_preview_folder_name, preview_template_folder_name, root_git, app_name,
156158
):
157159
shutil.copytree(
158160
root_git.get_full_file_path(preview_template_folder_name), root_git.get_full_file_path(new_preview_folder_name),

gitopscli/commands/delete_preview.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import hashlib
12
import logging
23
import os
34
import uuid
@@ -60,7 +61,8 @@ def delete_preview_command(
6061
root_git.checkout("master")
6162
logging.info("Config repo branch master checkout successful")
6263
config_branch = "master"
63-
preview_folder_name = gitops_config.application_name + "-" + preview_id + "-preview"
64+
hashed_preview_id = hashlib.sha256(preview_id.encode("utf-8")).hexdigest()[:8]
65+
preview_folder_name = gitops_config.application_name + "-" + hashed_preview_id + "-preview"
6466
logging.info("Preview folder name: %s", preview_folder_name)
6567
branch_preview_env_exists = os.path.exists(root_git.get_full_file_path(preview_folder_name))
6668
logging.info("Is preview env already existing for branch? %s", branch_preview_env_exists)

0 commit comments

Comments
 (0)