Inject cert-manager annotations and TLS configuration into Ingress resources

This commit is contained in:
suyiiyii 2025-03-15 09:56:32 +08:00
parent 5dc4290337
commit 3892da3ced
Signed by: suyiiyii
GPG Key ID: 044704CB29B8AD85
2 changed files with 28 additions and 6 deletions

View File

@ -12,9 +12,6 @@ httpServiceRender = lambda h: HTTPService {
kind = "Ingress"
metadata = {
name = h.service
annotations = {
"cert-manager.io/issuer": "letsencrypt"
}
}
spec = {
rules = [{
@ -38,3 +35,26 @@ httpServiceRender = lambda h: HTTPService {
}
[ingress]
}
certInjector = lambda input: networkingv1.Ingress | any {
"""Inject cert to Ingress"""
_result: any = {}
if input.kind != "Ingress":
_result = input
else:
ingress: networkingv1.Ingress = input as networkingv1.Ingress
print(ingress)
ingress.metadata.annotations = {"cert-manager.io/issuer" = "letsencrypt"}
ingress.spec.tls = [{
hosts = [r.host for r in ingress.spec.rules]
secretName = "tls-" + ingress.metadata.name
}]
_result = ingress
_result
}
httpServiceRefine = lambda h: HTTPService {
ingress = httpServiceRender(h)
ingress2 = certInjector(ingress[0])
ingress2
}

8
main.k
View File

@ -26,15 +26,17 @@ envs = base.Envs {
http = base.HTTPService {
service = "nginxxx"
domain = "nginxxx.ve.suyiiyii.top"
domain = prefix + "nginxxx.ve.suyiiyii.top"
}
prefix = option(prefix, "str", False, "")
deploys = sum([base.appRender(a) for a in apps], [])
apps_manifests = [base.envInjector(envs, deploy) for deploy in deploys]
ingresses = [base.httpServiceRender(http)]
ingresses = [base.httpServiceRefine(http)]
env_manifests = [base.envSecretRender(a) for a in base.Envs.instances()]
# base.appRender(a)
manifests.yaml_stream([apps_manifests, env_manifests, ingresses,base.issuer])
manifests.yaml_stream([apps_manifests, env_manifests, ingresses, base.issuer])
# print(prefix)