feature/introduce-namespaces #3
5 changed files with 127 additions and 109 deletions
|
@ -9,9 +9,6 @@
|
||||||
[dda.c4k-common.monitoring :as mon]
|
[dda.c4k-common.monitoring :as mon]
|
||||||
[dda.c4k-website.website :as website]))
|
[dda.c4k-website.website :as website]))
|
||||||
|
|
||||||
(def config-defaults {:issuer "staging"
|
|
||||||
:volume-size "3"})
|
|
||||||
|
|
||||||
(s/def ::mon-cfg ::mon/mon-cfg)
|
(s/def ::mon-cfg ::mon/mon-cfg)
|
||||||
(s/def ::mon-auth ::mon/mon-auth)
|
(s/def ::mon-auth ::mon/mon-auth)
|
||||||
|
|
||||||
|
@ -64,17 +61,18 @@
|
||||||
(->
|
(->
|
||||||
auth
|
auth
|
||||||
(assoc-in [:auth] (rest (auth :auth))))
|
(assoc-in [:auth] (rest (auth :auth))))
|
||||||
(conj result
|
(cm/concat-vec
|
||||||
(website/generate-nginx-deployment (flatten-and-reduce-config config))
|
result
|
||||||
;(website/generate-nginx-configmap (flatten-and-reduce-config config))
|
(website/generate-namespcae (flatten-and-reduce-config config))
|
||||||
;(website/generate-nginx-service (flatten-and-reduce-config config))
|
[(website/generate-nginx-deployment (flatten-and-reduce-config config))
|
||||||
;(website/generate-website-content-volume (flatten-and-reduce-config config))
|
(website/generate-nginx-configmap (flatten-and-reduce-config config))
|
||||||
;(website/generate-hashfile-volume (flatten-and-reduce-config config))
|
(website/generate-nginx-service (flatten-and-reduce-config config))
|
||||||
;(website/generate-website-ingress (flatten-and-reduce-config config))
|
(website/generate-website-content-volume (flatten-and-reduce-config config))
|
||||||
;(website/generate-website-certificate (flatten-and-reduce-config config))
|
(website/generate-hashfile-volume (flatten-and-reduce-config config))
|
||||||
;(website/generate-website-build-cron (flatten-and-reduce-config config))
|
(website/generate-website-build-cron (flatten-and-reduce-config config))
|
||||||
;(website/generate-website-build-secret (flatten-and-reduce-config config)
|
(website/generate-website-build-secret (flatten-and-reduce-config config)
|
||||||
; (flatten-and-reduce-auth auth))
|
(flatten-and-reduce-auth auth))]
|
||||||
|
(website/generate-ingress (flatten-and-reduce-config config))
|
||||||
)))))
|
)))))
|
||||||
|
|
||||||
(defn-spec k8s-objects cp/map-or-seq?
|
(defn-spec k8s-objects cp/map-or-seq?
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
[clojure.spec.alpha :as s]
|
[clojure.spec.alpha :as s]
|
||||||
#?(:clj [orchestra.core :refer [defn-spec]]
|
#?(:clj [orchestra.core :refer [defn-spec]]
|
||||||
:cljs [orchestra.core :refer-macros [defn-spec]])
|
:cljs [orchestra.core :refer-macros [defn-spec]])
|
||||||
|
[dda.c4k-common.ingress :as ing]
|
||||||
|
[dda.c4k-common.namespace :as ns]
|
||||||
[dda.c4k-website.website.website-internal :as int]))
|
[dda.c4k-website.website.website-internal :as int]))
|
||||||
|
|
||||||
(s/def ::unique-name ::int/unique-name)
|
(s/def ::unique-name ::int/unique-name)
|
||||||
|
@ -45,3 +47,63 @@
|
||||||
(let [final-config (merge config-defaults
|
(let [final-config (merge config-defaults
|
||||||
config)]
|
config)]
|
||||||
(int/generate-nginx-deployment final-config)))
|
(int/generate-nginx-deployment final-config)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn-spec generate-nginx-configmap map?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-nginx-configmap final-config)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn-spec generate-nginx-service map?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-nginx-service final-config)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn-spec generate-website-content-volume map?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-website-content-volume final-config)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn-spec generate-hashfile-volume map?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-hashfile-volume final-config)))
|
||||||
|
|
||||||
|
(defn-spec generate-website-build-cron map?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-website-build-cron final-config)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn-spec generate-website-build-secret map?
|
||||||
|
[config websiteconfig?
|
||||||
|
auth websiteauth?]
|
||||||
|
(let [final-config (merge config-defaults
|
||||||
|
config)]
|
||||||
|
(int/generate-website-build-secret final-config auth)))
|
||||||
|
|
||||||
|
(defn-spec generate-namespcae seq?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [name (int/replace-dots-by-minus (:unique-name config))
|
||||||
|
final-config (merge config-defaults
|
||||||
|
{:namespace name}
|
||||||
|
config)]
|
||||||
|
(ns/generate final-config)))
|
||||||
|
|
||||||
|
(defn-spec generate-ingress seq?
|
||||||
|
[config websiteconfig?]
|
||||||
|
(let [name (int/replace-dots-by-minus (:unique-name config))
|
||||||
|
final-config (merge config-defaults
|
||||||
|
{:service-name name
|
||||||
|
:service-port 80
|
||||||
|
:namespace name}
|
||||||
|
config)]
|
||||||
|
(ing/generate-simple-ingress final-config)))
|
|
@ -55,26 +55,6 @@
|
||||||
[fqdn pred/fqdn-string?]
|
[fqdn pred/fqdn-string?]
|
||||||
(str/replace fqdn #"\." "-"))
|
(str/replace fqdn #"\." "-"))
|
||||||
|
|
||||||
; TODO: remove
|
|
||||||
(defn-spec generate-app-name string?
|
|
||||||
[unique-name pred/fqdn-string?]
|
|
||||||
(str (replace-dots-by-minus unique-name) "-website"))
|
|
||||||
|
|
||||||
; TODO: remove
|
|
||||||
(defn-spec generate-service-name string?
|
|
||||||
[unique-name pred/fqdn-string?]
|
|
||||||
(str (replace-dots-by-minus unique-name) "-service"))
|
|
||||||
|
|
||||||
; TODO: remove
|
|
||||||
(defn-spec generate-cert-name string?
|
|
||||||
[unique-name pred/fqdn-string?]
|
|
||||||
(str (replace-dots-by-minus unique-name) "-cert"))
|
|
||||||
|
|
||||||
; TODO: remove
|
|
||||||
(defn-spec generate-ingress-name string?
|
|
||||||
[unique-name pred/fqdn-string?]
|
|
||||||
(str (replace-dots-by-minus unique-name) "-ingress"))
|
|
||||||
|
|
||||||
; https://your.gitea.host/api/v1/repos/<owner>/<repo>/archive/<branch>.zip
|
; https://your.gitea.host/api/v1/repos/<owner>/<repo>/archive/<branch>.zip
|
||||||
(defn-spec generate-gitrepourl string?
|
(defn-spec generate-gitrepourl string?
|
||||||
[host pred/fqdn-string?
|
[host pred/fqdn-string?
|
||||||
|
@ -113,8 +93,7 @@
|
||||||
(cm/replace-all-matching-values-by-new-value "BUILD_CPU_REQUEST" build-cpu-request)
|
(cm/replace-all-matching-values-by-new-value "BUILD_CPU_REQUEST" build-cpu-request)
|
||||||
(cm/replace-all-matching-values-by-new-value "BUILD_CPU_LIMIT" build-cpu-limit)
|
(cm/replace-all-matching-values-by-new-value "BUILD_CPU_LIMIT" build-cpu-limit)
|
||||||
(cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_REQUEST" build-memory-request)
|
(cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_REQUEST" build-memory-request)
|
||||||
(cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_LIMIT" build-memory-limit)
|
(cm/replace-all-matching-values-by-new-value "BUILD_MEMORY_LIMIT" build-memory-limit))))
|
||||||
)))
|
|
||||||
|
|
||||||
|
|
||||||
(defn-spec generate-nginx-configmap map?
|
(defn-spec generate-nginx-configmap map?
|
||||||
|
@ -164,27 +143,6 @@
|
||||||
(replace-all-matching-substrings-beginning-with "NAME" name))))
|
(replace-all-matching-substrings-beginning-with "NAME" name))))
|
||||||
|
|
||||||
|
|
||||||
; TODO: remove
|
|
||||||
(defn-spec generate-website-ingress pred/map-or-seq?
|
|
||||||
[config websiteconfig?]
|
|
||||||
(let [{:keys [unique-name fqdns]} config]
|
|
||||||
(ing/generate-ingress {:fqdns fqdns
|
|
||||||
:app-name (generate-app-name unique-name)
|
|
||||||
:ingress-name (generate-ingress-name unique-name)
|
|
||||||
:service-name (generate-service-name unique-name)
|
|
||||||
:service-port 80})))
|
|
||||||
|
|
||||||
; TODO: remove - using simple ingress instead removes the need of cert handling
|
|
||||||
(defn-spec generate-website-certificate pred/map-or-seq?
|
|
||||||
[config websiteconfig?]
|
|
||||||
(let [{:keys [unique-name issuer fqdns]
|
|
||||||
:or {issuer "staging"}} config]
|
|
||||||
(ing/generate-certificate {:fqdns fqdns
|
|
||||||
:app-name (generate-app-name unique-name)
|
|
||||||
:cert-name (generate-cert-name unique-name)
|
|
||||||
:issuer issuer})))
|
|
||||||
|
|
||||||
|
|
||||||
(defn-spec generate-website-build-cron map?
|
(defn-spec generate-website-build-cron map?
|
||||||
[config websiteconfig?]
|
[config websiteconfig?]
|
||||||
(let [{:keys [unique-name build-cpu-request build-cpu-limit build-memory-request
|
(let [{:keys [unique-name build-cpu-request build-cpu-limit build-memory-request
|
||||||
|
|
|
@ -118,3 +118,8 @@
|
||||||
(cut/flatten-and-reduce-auth (cut/sort-auth auth1))))
|
(cut/flatten-and-reduce-auth (cut/sort-auth auth1))))
|
||||||
(is (= flattened-and-reduced-auth
|
(is (= flattened-and-reduced-auth
|
||||||
(cut/flatten-and-reduce-auth (cut/sort-auth auth2)))))
|
(cut/flatten-and-reduce-auth (cut/sort-auth auth2)))))
|
||||||
|
|
||||||
|
(deftest test-generate
|
||||||
|
(is (= 22
|
||||||
|
(count (cut/generate (yaml/load-as-edn "website-test/valid-config.yaml")
|
||||||
|
(yaml/load-as-edn "website-test/valid-auth.yaml"))))))
|
||||||
|
|
|
@ -6,52 +6,47 @@
|
||||||
[dda.c4k-common.test-helper :as th]
|
[dda.c4k-common.test-helper :as th]
|
||||||
[dda.c4k-website.website :as cut]))
|
[dda.c4k-website.website :as cut]))
|
||||||
|
|
||||||
(deftest should-generate-nginx-deployment
|
(deftest should-generate-ingress
|
||||||
(is (= {:apiVersion "apps/v1",
|
(is (= [{:host "test.de",
|
||||||
:kind "Deployment",
|
:http
|
||||||
:metadata {:name "test-io-deployment",
|
{:paths
|
||||||
:namespace "test-io"
|
[{:pathType "Prefix",
|
||||||
:labels {:app.kubernetes.part-of "test-io"}},
|
:path "/",
|
||||||
:spec
|
:backend {:service {:name "test-io", :port {:number 80}}}}]}}
|
||||||
{:replicas 1,
|
{:host "test.org",
|
||||||
:selector {:matchLabels {:app "test-io-nginx"}},
|
:http
|
||||||
:template
|
{:paths
|
||||||
{:metadata {:namespace "webserver"
|
[{:pathType "Prefix",
|
||||||
:labels {:app "test-io-nginx"}},
|
:path "/",
|
||||||
:spec
|
:backend {:service {:name "test-io", :port {:number 80}}}}]}}
|
||||||
{:containers
|
{:host "www.test.de",
|
||||||
[{:name "test-io-nginx",
|
:http
|
||||||
:image "nginx:latest",
|
{:paths
|
||||||
:imagePullPolicy "IfNotPresent",
|
[{:pathType "Prefix",
|
||||||
:ports [{:containerPort 80}],
|
:path "/",
|
||||||
:volumeMounts
|
:backend {:service {:name "test-io", :port {:number 80}}}}]}}
|
||||||
[{:mountPath "/etc/nginx", :readOnly true, :name "etc-ngingx"}
|
{:host "www.test.org",
|
||||||
{:mountPath "/var/log/nginx", :name "log"}
|
:http
|
||||||
{:mountPath "/var/www/html/website", :name "content-volume", :readOnly true}]}],
|
{:paths
|
||||||
:initContainers
|
[{:pathType "Prefix",
|
||||||
[{:image "domaindrivenarchitecture/c4k-website-build",
|
:path "/",
|
||||||
:name "test-io-init-build-container",
|
:backend {:service {:name "test-io", :port {:number 80}}}}]}}]
|
||||||
:imagePullPolicy "IfNotPresent",
|
(get-in
|
||||||
:resources {:requests {:cpu "500m", :memory "256Mi"}, :limits {:cpu "1700m", :memory "512Mi"}},
|
(cut/generate-ingress {:forgejo-host "gitlab.de",
|
||||||
:command ["/entrypoint.sh"],
|
|
||||||
:envFrom [{:secretRef {:name "test-io-secret"}}],
|
|
||||||
:volumeMounts [{:name "content-volume", :mountPath "/var/www/html/website"}
|
|
||||||
{:name "hashfile-volume", :mountPath "/var/hashfile.d"}]}],
|
|
||||||
:volumes
|
|
||||||
[{:name "etc-ngingx",
|
|
||||||
:configMap
|
|
||||||
{:name "etc-ngingx",
|
|
||||||
:items
|
|
||||||
[{:key "nginx.conf", :path "nginx.conf"}
|
|
||||||
{:key "website.conf", :path "conf.d/website.conf"}
|
|
||||||
{:key "mime.types", :path "mime.types"}]}}
|
|
||||||
{:name "log", :emptyDir {}}
|
|
||||||
{:name "content-volume", :persistentVolumeClaim {:claimName "test-io-content-volume"}}
|
|
||||||
{:name "hashfile-volume", :persistentVolumeClaim {:claimName "test-io-hashfile-volume"}}]}}}}
|
|
||||||
(cut/generate-nginx-deployment {:forgejo-host "gitlab.de",
|
|
||||||
:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"],
|
:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"],
|
||||||
:forgejo-repo "repo",
|
:forgejo-repo "repo",
|
||||||
:sha256sum-output "123456789ab123cd345de script-file-name.sh",
|
:sha256sum-output "123456789ab123cd345de script-file-name.sh",
|
||||||
:issuer "staging",
|
:issuer "staging",
|
||||||
:branchname "main",
|
:branchname "main",
|
||||||
:unique-name "test.io"}))))
|
:unique-name "test.io"})
|
||||||
|
[2 :spec :rules])))
|
||||||
|
(is (= "test-io"
|
||||||
|
(get-in
|
||||||
|
(cut/generate-ingress {:forgejo-host "gitlab.de",
|
||||||
|
:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"],
|
||||||
|
:forgejo-repo "repo",
|
||||||
|
:sha256sum-output "123456789ab123cd345de script-file-name.sh",
|
||||||
|
:issuer "staging",
|
||||||
|
:branchname "main",
|
||||||
|
:unique-name "test.io"})
|
||||||
|
[2 :metadata :namespace]))))
|
Loading…
Reference in a new issue