Skip to content

Commit 6d70a7d

Browse files
fix(GitOpsConfig): prevent namespace >63
1 parent 4381775 commit 6d70a7d

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

‎gitopscli/gitops_config.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,14 @@ def get_preview_namespace(self, preview_id: str) -> str:
111111

112112
current_length = len(preview_namespace) - len("{PREVIEW_ID}")
113113
remaining_length = _MAX_NAMESPACE_LENGTH - current_length
114+
115+
if remaining_length < 1:
116+
preview_namespace = preview_namespace.replace("{PREVIEW_ID}", "")
117+
raise GitOpsException(
118+
f"Preview namespace is too long (max {_MAX_NAMESPACE_LENGTH} chars): "
119+
f"{preview_namespace} ({len(preview_namespace)} chars)"
120+
)
121+
114122
sanitized_preview_id = self.__sanitize(preview_id, remaining_length)
115123

116124
preview_namespace = preview_namespace.replace("{PREVIEW_ID}", sanitized_preview_id)

‎tests/test_gitops_config_v1.py‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,18 @@ def test_preview_target_namespace_invalid_template(self):
227227
config.get_preview_namespace("preview-1")
228228
self.assertEqual("Invalid character in preview namespace: '*'", str(ex.value))
229229

230+
def test_preview_target_namespace_too_long(self):
231+
self.yaml["previewConfig"]["target"][
232+
"namespace"
233+
] = "veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery-long-{PREVIEW_ID}-{PREVIEW_ID_HASH}"
234+
config = self.load()
235+
with pytest.raises(GitOpsException) as ex:
236+
config.get_preview_namespace("x")
237+
self.assertEqual(
238+
"Preview namespace is too long (max 63 chars): veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery-long--2d711642 (68 chars)",
239+
str(ex.value),
240+
)
241+
230242
def test_preview_target_namespace_contains_invalid_variable(self):
231243
self.yaml["previewConfig"]["target"]["namespace"] = "{FOO}-bar"
232244
self.assert_load_error("GitOps config template '{FOO}-bar' contains invalid variable: FOO")

0 commit comments

Comments
 (0)