mirror of
https://github.com/dhall-lang/dhall-kubernetes.git
synced 2024-09-17 10:27:08 +03:00
78e9df229b
… and also update a few other things along the way
87 lines
2.5 KiB
Plaintext
87 lines
2.5 KiB
Plaintext
let Prelude =
|
|
../Prelude.dhall
|
|
sha256:10db3c919c25e9046833df897a8ffe2701dc390fa0893d958c3430524be5a43e
|
|
|
|
let map = Prelude.List.map
|
|
|
|
let kubernetes =
|
|
../package.dhall
|
|
sha256:705f7bd1c157c5544143ab5917bdc3972fe941300ce4189a8ea89e6ddd9c1875
|
|
|
|
let Service = { name : Text, host : Text, version : Text }
|
|
|
|
let services = [ { name = "foo", host = "foo.example.com", version = "2.3" } ]
|
|
|
|
let makeTLS
|
|
: Service → kubernetes.IngressTLS.Type
|
|
= λ(service : Service) →
|
|
{ hosts = Some [ service.host ]
|
|
, secretName = Some "${service.name}-certificate"
|
|
}
|
|
|
|
let makeRule
|
|
: Service → kubernetes.IngressRule.Type
|
|
= λ(service : Service) →
|
|
{ host = Some service.host
|
|
, http = Some
|
|
{ paths =
|
|
[ kubernetes.HTTPIngressPath::{
|
|
, backend = kubernetes.IngressBackend::{
|
|
, service = Some kubernetes.IngressServiceBackend::{
|
|
, name = service.name
|
|
, port = Some kubernetes.ServiceBackendPort::{
|
|
, number = Some 80
|
|
}
|
|
}
|
|
}
|
|
, pathType = "Exact"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
let mkIngress
|
|
: List Service → kubernetes.Ingress.Type
|
|
= λ(inputServices : List Service) →
|
|
let annotations =
|
|
toMap
|
|
{ `kubernetes.io/ingress.class` = "nginx"
|
|
, `kubernetes.io/ingress.allow-http` = "false"
|
|
}
|
|
|
|
let defaultService =
|
|
{ name = "default"
|
|
, host = "default.example.com"
|
|
, version = " 1.0"
|
|
}
|
|
|
|
let ingressServices = inputServices # [ defaultService ]
|
|
|
|
let spec =
|
|
kubernetes.IngressSpec::{
|
|
, tls = Some
|
|
( map
|
|
Service
|
|
kubernetes.IngressTLS.Type
|
|
makeTLS
|
|
ingressServices
|
|
)
|
|
, rules = Some
|
|
( map
|
|
Service
|
|
kubernetes.IngressRule.Type
|
|
makeRule
|
|
ingressServices
|
|
)
|
|
}
|
|
|
|
in kubernetes.Ingress::{
|
|
, metadata = kubernetes.ObjectMeta::{
|
|
, name = Some "nginx"
|
|
, annotations = Some annotations
|
|
}
|
|
, spec = Some spec
|
|
}
|
|
|
|
in mkIngress services
|