80 lines
No EOL
3 KiB
Clojure
80 lines
No EOL
3 KiB
Clojure
(ns dda.c4k-common.ingress
|
|
(:require
|
|
[clojure.spec.alpha :as s]
|
|
#?(:clj [orchestra.core :refer [defn-spec]]
|
|
:cljs [orchestra.core :refer-macros [defn-spec]])
|
|
[dda.c4k-common.namespace :as ns]
|
|
[dda.c4k-common.ingress.ingress-internal :as int]))
|
|
|
|
(s/def ::issuer ::int/issuer)
|
|
(s/def ::service-name ::int/service-name)
|
|
(s/def ::app-name ::int/app-name)
|
|
(s/def ::ingress-name ::int/ingress-name)
|
|
(s/def ::cert-name ::int/cert-name)
|
|
(s/def ::service-port ::int/service-port)
|
|
(s/def ::fqdns ::int/fqdns)
|
|
(s/def ::average-rate ::int/average-rate)
|
|
(s/def ::burst-rate ::int/burst-rate)
|
|
|
|
(def simple-ingress? (s/keys :req-un [::fqdns ::service-name ::service-port]
|
|
:opt-un [::issuer ::average-rate ::burst-rate ::ns/namespace]))
|
|
|
|
(def ingress? (s/keys :req-un [::fqdns ::app-name ::ingress-name ::service-name ::service-port]
|
|
:opt-un [::issuer ::cert-name ::rate-limit-name ::ns/namespace]))
|
|
|
|
(def certificate? (s/keys :req-un [::fqdns ::app-name ::cert-name]
|
|
:opt-un [::issuer ::ns/namespace]))
|
|
|
|
(def rate-limit-config? (s/keys :req-un [::rate-limit-name
|
|
::average-rate
|
|
::burst-rate]))
|
|
|
|
(def default-config
|
|
(merge ns/default-config
|
|
{:issuer "staging"
|
|
:average-rate 10
|
|
:burst-rate 20}))
|
|
|
|
|
|
(defn-spec generate-certificate map?
|
|
[config certificate?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-certificate final-config)))
|
|
|
|
|
|
(defn-spec generate-ingress map?
|
|
[config ingress?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-ingress final-config)))
|
|
|
|
|
|
(defn-spec generate-ingress-and-cert seq?
|
|
[config simple-ingress?]
|
|
(let [{:keys [service-name]} config
|
|
final-config (merge {:app-name service-name
|
|
:ingress-name service-name
|
|
:cert-name service-name}
|
|
default-config
|
|
config)]
|
|
[(int/generate-certificate final-config)
|
|
(int/generate-ingress final-config)]))
|
|
|
|
|
|
(defn-spec generate-simple-ingress seq?
|
|
[config simple-ingress?]
|
|
(let [{:keys [service-name]} config
|
|
final-config (merge {:app-name service-name
|
|
:ingress-name service-name
|
|
:cert-name service-name
|
|
:rate-limit-name service-name}
|
|
default-config
|
|
config)
|
|
{:keys [average-rate burst-rate]} final-config]
|
|
[(int/generate-certificate final-config)
|
|
(int/generate-rate-limit-middleware {:rate-limit-name service-name
|
|
:namespace (:namespace final-config)
|
|
:average-rate average-rate
|
|
:burst-rate burst-rate})
|
|
(int/generate-ingress final-config)])) |