Skip to content

Commit b74e56d

Browse files
Merge pull request #166 from baloise/feat/preview-id-hash-short
feat(GitOpsCli): add var PREVIEW_ID_HASH_SHORT
2 parents 04be2c6 + c08091c commit b74e56d

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

docs/includes/preview-configuration.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,6 @@ previewConfig:
6363
- `create-preview`: The CLI provided `--preview-id`
6464
- `create-pr-preview`: The branch name in the *app repository*
6565
- `PREVIEW_ID_HASH`: The first 8 characters of the SHA256 hash of `PREVIEW_ID`
66+
- `PREVIEW_ID_HASH_SHORT`: The first 3 characters of the SHA256 hash of `PREVIEW_ID`
6667
- `PREVIEW_NAMESPACE`: The resulting value of `previewConfig.target.namespace`
6768
- `PREVIEW_HOST`: The resulting value of `previewConfig.host`

gitopscli/gitops_config.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class PreviewContext:
2424
"APPLICATION_NAME": lambda context: context.gitops_config.application_name,
2525
"PREVIEW_ID": lambda context: context.preview_id,
2626
"PREVIEW_ID_HASH": lambda context: GitOpsConfig.create_preview_id_hash(context.preview_id),
27+
"PREVIEW_ID_HASH_SHORT": lambda context: GitOpsConfig.create_preview_id_hash_short(context.preview_id),
2728
}
2829

2930
def __init__(self, path: str, value_template: str):
@@ -72,7 +73,8 @@ def __post_init__(self) -> None:
7273
assert isinstance(self.application_name, str), "application_name of wrong type!"
7374
assert isinstance(self.preview_host_template, str), "preview_host_template of wrong type!"
7475
self.__assert_variables(
75-
self.preview_host_template, {"APPLICATION_NAME", "PREVIEW_ID_HASH", "PREVIEW_ID", "PREVIEW_NAMESPACE"}
76+
self.preview_host_template,
77+
{"APPLICATION_NAME", "PREVIEW_ID_HASH", "PREVIEW_ID_HASH_SHORT", "PREVIEW_ID", "PREVIEW_NAMESPACE"},
7678
)
7779
assert isinstance(self.preview_template_organisation, str), "preview_template_organisation of wrong type!"
7880
assert isinstance(self.preview_template_repository, str), "preview_template_repository of wrong type!"
@@ -88,7 +90,8 @@ def __post_init__(self) -> None:
8890
self.preview_target_namespace_template, str
8991
), "preview_target_namespace_template of wrong type!"
9092
self.__assert_variables(
91-
self.preview_target_namespace_template, {"APPLICATION_NAME", "PREVIEW_ID_HASH", "PREVIEW_ID"}
93+
self.preview_target_namespace_template,
94+
{"APPLICATION_NAME", "PREVIEW_ID_HASH", "PREVIEW_ID_HASH_SHORT", "PREVIEW_ID"},
9295
)
9396
assert isinstance(
9497
self.preview_target_max_namespace_length, int
@@ -104,6 +107,7 @@ def get_preview_host(self, preview_id: str) -> str:
104107
preview_host = self.preview_host_template
105108
preview_host = preview_host.replace("${APPLICATION_NAME}", self.application_name)
106109
preview_host = preview_host.replace("${PREVIEW_ID_HASH}", self.create_preview_id_hash(preview_id))
110+
preview_host = preview_host.replace("${PREVIEW_ID_HASH_SHORT}", self.create_preview_id_hash_short(preview_id))
107111
preview_host = preview_host.replace("${PREVIEW_ID}", self.__sanitize(preview_id))
108112
preview_host = preview_host.replace("${PREVIEW_NAMESPACE}", self.get_preview_namespace(preview_id))
109113
return preview_host
@@ -112,6 +116,9 @@ def get_preview_namespace(self, preview_id: str) -> str:
112116
preview_namespace = self.preview_target_namespace_template
113117
preview_namespace = preview_namespace.replace("${APPLICATION_NAME}", self.application_name)
114118
preview_namespace = preview_namespace.replace("${PREVIEW_ID_HASH}", self.create_preview_id_hash(preview_id))
119+
preview_namespace = preview_namespace.replace(
120+
"${PREVIEW_ID_HASH_SHORT}", self.create_preview_id_hash_short(preview_id)
121+
)
115122

116123
current_length = len(preview_namespace) - len("${PREVIEW_ID}")
117124
remaining_length = self.preview_target_max_namespace_length - current_length
@@ -160,6 +167,10 @@ def is_preview_template_equal_target(self) -> bool:
160167
def create_preview_id_hash(preview_id: str) -> str:
161168
return hashlib.sha256(preview_id.encode("utf-8")).hexdigest()[:8]
162169

170+
@staticmethod
171+
def create_preview_id_hash_short(preview_id: str) -> str:
172+
return GitOpsConfig.create_preview_id_hash(preview_id)[:3]
173+
163174
@staticmethod
164175
def from_yaml(yaml: Any) -> "GitOpsConfig":
165176
return _GitOpsConfigYamlParser(yaml).parse()
@@ -302,7 +313,11 @@ def __parse_v1(self) -> GitOpsConfig:
302313
preview_target_organisation=config.preview_target_organisation,
303314
preview_target_repository=config.preview_target_repository,
304315
preview_target_branch=config.preview_target_branch,
305-
preview_target_namespace_template=add_var_dollar(config.preview_target_namespace_template),
316+
preview_target_namespace_template=add_var_dollar(
317+
self.__get_string_value_or_default(
318+
"previewConfig.target.namespace", "{APPLICATION_NAME}-{PREVIEW_ID}-{PREVIEW_ID_HASH}-preview",
319+
)
320+
),
306321
preview_target_max_namespace_length=63,
307322
replacements=replacements,
308323
)
@@ -359,7 +374,7 @@ def __parse_v2(self) -> GitOpsConfig:
359374
preview_target_repository=preview_target_repository,
360375
preview_target_branch=preview_target_branch,
361376
preview_target_namespace_template=self.__get_string_value_or_default(
362-
"previewConfig.target.namespace", "${APPLICATION_NAME}-${PREVIEW_ID}-${PREVIEW_ID_HASH}-preview",
377+
"previewConfig.target.namespace", "${APPLICATION_NAME}-${PREVIEW_ID}-${PREVIEW_ID_HASH_SHORT}-preview",
363378
),
364379
preview_target_max_namespace_length=preview_target_max_namespace_length,
365380
replacements=replacements,

tests/test_gitops_config_v2.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,13 @@ def test_preview_target_namespace_default(self):
209209
del self.yaml["previewConfig"]["target"]["namespace"]
210210
config = self.load()
211211
self.assertEqual(
212-
config.preview_target_namespace_template, "${APPLICATION_NAME}-${PREVIEW_ID}-${PREVIEW_ID_HASH}-preview"
212+
config.preview_target_namespace_template,
213+
"${APPLICATION_NAME}-${PREVIEW_ID}-${PREVIEW_ID_HASH_SHORT}-preview",
213214
)
214215
actual_namespace = config.get_preview_namespace(
215216
"Very long preview ID. It will be cut to have max 'maxNamespaceLength' chars of namespace in total!!"
216217
)
217-
self.assertEqual(actual_namespace, "my-app-very-long-preview-id-it-wi-c9fdf802-preview")
218+
self.assertEqual(actual_namespace, "my-app-very-long-preview-id-it-will-be-c9f-preview")
218219
self.assertTrue(len(actual_namespace) <= 50)
219220

220221
def test_preview_target_namespace_not_a_string(self):

0 commit comments

Comments
 (0)