Compare commits
14 Commits
7697420c30
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
a79eff18c6
|
|||
|
4465018c15
|
|||
|
3892da3ced
|
|||
|
5dc4290337
|
|||
|
86f5523abb
|
|||
|
bb4c99d9b7
|
|||
|
dec20a87bd
|
|||
|
298e82bcb8
|
|||
|
c62e160288
|
|||
|
f3e247460a
|
|||
|
98e324c586
|
|||
|
6edd214baf
|
|||
|
a890a979e9
|
|||
|
69c336d9e9
|
@@ -0,0 +1 @@
|
||||
tmp/build-errors.log
|
||||
+1
-1
@@ -24,7 +24,7 @@ appRender = lambda a: App {
|
||||
template.spec.containers = [
|
||||
{
|
||||
name = a.name
|
||||
image = a.image
|
||||
image = "cr.suyiiyii.top/docker.io/" + a.image
|
||||
ports = [{containerPort = a.port}]
|
||||
}
|
||||
]
|
||||
|
||||
+10
-7
@@ -5,29 +5,32 @@ schema Envs:
|
||||
"""Env schema"""
|
||||
envs: {str:str}
|
||||
|
||||
secret_name = "app-env"
|
||||
|
||||
envSecretRender = lambda e: Envs {
|
||||
secret = corev1.Secret {
|
||||
apiVersion = "v1"
|
||||
kind = "Secret"
|
||||
metadata = {
|
||||
name = "app-sevret"
|
||||
name = secret_name
|
||||
}
|
||||
data = e.envs
|
||||
stringData = e.envs
|
||||
}
|
||||
[secret]
|
||||
}
|
||||
|
||||
envInjector = lambda envs: Envs, deploy {
|
||||
envInjector = lambda envs: Envs, input: appsv1.Deployment | any {
|
||||
"""Inject envs to Deployment"""
|
||||
_result = {}
|
||||
if deploy.kind != "Deployment":
|
||||
_result = deploy
|
||||
_result: any = {}
|
||||
if input.kind != "Deployment":
|
||||
_result = input
|
||||
else:
|
||||
deploy: appsv1.Deployment = input as appsv1.Deployment
|
||||
secretEnv: [corev1.EnvVar] = [{
|
||||
name = k
|
||||
valueFrom = {
|
||||
secretKeyRef = {
|
||||
name = "app-secret"
|
||||
name = secret_name
|
||||
key = k
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
import k8s.api.networking.v1 as networkingv1
|
||||
|
||||
schema HTTPService:
|
||||
"""http service"""
|
||||
service: str
|
||||
domain: str
|
||||
|
||||
httpServiceRender = lambda h: HTTPService {
|
||||
"""Render http service to Ingress"""
|
||||
ingress = networkingv1.Ingress {
|
||||
apiVersion = "networking.k8s.io/v1"
|
||||
kind = "Ingress"
|
||||
metadata = {
|
||||
name = h.service
|
||||
}
|
||||
spec = {
|
||||
rules = [{
|
||||
host = h.domain
|
||||
http = {
|
||||
paths = [{
|
||||
path = "/"
|
||||
pathType = "Prefix"
|
||||
backend = {
|
||||
service = {
|
||||
name = h.service
|
||||
port = {
|
||||
number = 80
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
[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
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import cert_manager.v1
|
||||
|
||||
issuer = v1.Issuer {
|
||||
apiVersion = "cert-manager.io/v1"
|
||||
kind = "Issuer"
|
||||
metadata = {
|
||||
name = "letsencrypt"
|
||||
}
|
||||
spec = {
|
||||
acme = {
|
||||
email = "suyiiyii@gmail.com"
|
||||
server = "https://acme-v02.api.letsencrypt.org/directory"
|
||||
privateKeySecretRef = {
|
||||
name = "letsencrypt"
|
||||
}
|
||||
solvers = [{
|
||||
http01 = {
|
||||
ingress = {
|
||||
class = "traefik"
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,4 +4,5 @@ edition = "v0.11.1"
|
||||
version = "0.0.1"
|
||||
|
||||
[dependencies]
|
||||
cert-manager = "0.3.0"
|
||||
k8s = "1.31.2"
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
[dependencies]
|
||||
[dependencies.cert-manager]
|
||||
name = "cert-manager"
|
||||
full_name = "cert-manager_0.3.0"
|
||||
version = "0.3.0"
|
||||
sum = "yyuUXsyOsHOGUK3e9P6GzM5A0hcSpW1XBd5O6TLhyvE="
|
||||
reg = "ghcr.io"
|
||||
repo = "kcl-lang/cert-manager"
|
||||
oci_tag = "0.3.0"
|
||||
[dependencies.k8s]
|
||||
name = "k8s"
|
||||
full_name = "k8s_1.31.2"
|
||||
|
||||
@@ -2,18 +2,20 @@ import base
|
||||
import yaml
|
||||
import manifests
|
||||
|
||||
apps = [
|
||||
base.App {
|
||||
name = "myapp"
|
||||
name = "nginxxx"
|
||||
replicas = 2
|
||||
image = "myimage"
|
||||
port = 8080
|
||||
image = "library/nginx"
|
||||
port = 80
|
||||
}
|
||||
base.App {
|
||||
name = "myapp122"
|
||||
name = "caddyy"
|
||||
replicas = 2
|
||||
image = "myimage"
|
||||
port = 8080
|
||||
image = "library/caddy"
|
||||
port = 80
|
||||
}
|
||||
]
|
||||
|
||||
envs = base.Envs {
|
||||
envs = {
|
||||
@@ -22,11 +24,18 @@ envs = base.Envs {
|
||||
}
|
||||
}
|
||||
|
||||
deploys = sum([base.appRender(a) for a in base.App.instances()], [])
|
||||
# print(yaml.encode(deploys))
|
||||
http = base.HTTPService {
|
||||
service = "nginxxx"
|
||||
domain = prefix + "nginxxx.ve.suyiiyii.top"
|
||||
}
|
||||
|
||||
prefix = option("prefix") or "prefix"
|
||||
deploys = sum([base.appRender(a) for a in apps], [])
|
||||
|
||||
apps_manifests = [base.envInjector(envs, deploy) for deploy in deploys]
|
||||
|
||||
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])
|
||||
manifests.yaml_stream([apps_manifests, env_manifests, ingresses, base.issuer])
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
exit status 1exit status 2exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
|
||||
Reference in New Issue
Block a user