From 03d4f4f7ca6ebaaa038dca676247f2805ad6719c Mon Sep 17 00:00:00 2001 From: erik Date: Fri, 30 Sep 2022 10:14:10 +0200 Subject: [PATCH] Remove storage logic --- doc/tryItOut.png | Bin 31676 -> 42305 bytes src/main/clj/dda/c4k_website/uberjar.clj | 2 +- src/main/cljc/dda/c4k_website/core.cljc | 3 -- src/main/cljc/dda/c4k_website/website.cljc | 24 ++++------------ src/main/cljs/dda/c4k_website/browser.cljs | 26 +++++------------- .../cljc/dda/c4k_website/website_test.cljc | 14 ++-------- 6 files changed, 17 insertions(+), 52 deletions(-) diff --git a/doc/tryItOut.png b/doc/tryItOut.png index f855c27f69e6a4e44c58399501cfaf8af2e76e8f..a4c2b585ed4ffa369615b56273a4b8c6b194d721 100644 GIT binary patch literal 42305 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 diff --git a/src/main/clj/dda/c4k_website/uberjar.clj b/src/main/clj/dda/c4k_website/uberjar.clj index f87f507..7e09e2a 100644 --- a/src/main/clj/dda/c4k_website/uberjar.clj +++ b/src/main/clj/dda/c4k_website/uberjar.clj @@ -7,4 +7,4 @@ (defn -main [& cmd-args] - (uberjar/main-common "c4k-website" website/config? website/auth? website/config-defaults core/k8s-objects cmd-args)) + (uberjar/main-common "c4k-website" website/config? website/auth? core/config-defaults core/k8s-objects cmd-args)) diff --git a/src/main/cljc/dda/c4k_website/core.cljc b/src/main/cljc/dda/c4k_website/core.cljc index de0ffbd..b71b103 100644 --- a/src/main/cljc/dda/c4k_website/core.cljc +++ b/src/main/cljc/dda/c4k_website/core.cljc @@ -13,9 +13,6 @@ (def auth? (s/keys :req-un [::website/authtoken ::website/gitrepourl])) -(def vol? (s/keys :req-un [::website/volume-total-storage-size - ::website/number-of-websites])) - (defn k8s-objects [config] (cm/concat-vec (map yaml/to-string diff --git a/src/main/cljc/dda/c4k_website/website.cljc b/src/main/cljc/dda/c4k_website/website.cljc index 15924fd..9e86e7b 100644 --- a/src/main/cljc/dda/c4k_website/website.cljc +++ b/src/main/cljc/dda/c4k_website/website.cljc @@ -1,8 +1,6 @@ (ns dda.c4k-website.website (:require - [clojure.spec.alpha :as s] - #?(:clj [clojure.math.numeric-tower :as m] - :cljs [cljs.math :as m]) + [clojure.spec.alpha :as s] [clojure.string :as st] #?(:cljs [shadow.resource :as rc]) #?(:clj [orchestra.core :refer [defn-spec]] @@ -16,24 +14,15 @@ (s/def ::fqdn pred/fqdn-string?) (s/def ::issuer pred/letsencrypt-issuer?) -(s/def ::volume-total-storage-size int?) -(s/def ::number-of-websites int?) (s/def ::authtoken pred/bash-env-string?) (s/def ::gitrepourl pred/bash-env-string?) -(def config-defaults {:issuer "staging"}) - (def config? (s/keys :req-un [::fqdn] :opt-un [::issuer])) (def auth? (s/keys :req-un [::authtoken ::gitrepourl])) -(def vol? (s/keys :req-un [::volume-total-storage-size - ::number-of-websites])) - -(defn volume-size-by-total-available-space - [total number-of-websites-on-node] - (m/floor (/ total number-of-websites-on-node))) ; ToDo: This might be a terrible idea +(def volume-size 3) (defn unique-name-from-fqdn [fqdn] @@ -41,7 +30,7 @@ ; ToDo: Move to common? (defn-spec replace-all-matching-subvalues-in-string-start pred/map-or-seq? - [col string? + [col string? ;ToDo richtig spec-en value-to-partly-match string? value-to-inplace string?] (clojure.walk/postwalk #(if (and (= (type value-to-partly-match) (type %)) @@ -110,13 +99,12 @@ (replace-all-matching-subvalues-in-string-start "NAME" (unique-name-from-fqdn fqdn))))) (defn-spec generate-website-content-volume pred/map-or-seq? - [config vol?] - (let [{:keys [volume-total-storage-size number-of-websites fqdn]} config - data-storage-size (volume-size-by-total-available-space volume-total-storage-size number-of-websites)] + [config config?] + (let [{:keys [fqdn]} config] (-> (yaml/load-as-edn "website/website-content-volume.yaml") (replace-all-matching-subvalues-in-string-start "NAME" (unique-name-from-fqdn fqdn)) - (cm/replace-all-matching-values-by-new-value "WEBSITESTORAGESIZE" (str (str data-storage-size) "Gi"))))) + (cm/replace-all-matching-values-by-new-value "WEBSITESTORAGESIZE" (str (str volume-size) "Gi"))))) (defn-spec generate-website-build-cron pred/map-or-seq? [config config?] diff --git a/src/main/cljs/dda/c4k_website/browser.cljs b/src/main/cljs/dda/c4k_website/browser.cljs index 48a08b9..d69d012 100644 --- a/src/main/cljs/dda/c4k_website/browser.cljs +++ b/src/main/cljs/dda/c4k_website/browser.cljs @@ -30,12 +30,7 @@ "domain" (cm/concat-vec (br/generate-input-field "fqdn" "Your fqdn:" "deineWebsite.de") - (br/generate-input-field "issuer" "(Optional) Your issuer prod/staging:" ""))) - (generate-group - "provider" - (cm/concat-vec - (br/generate-input-field "volume-total-storage-size" "Your website volume-total-storage-size:" "20") - (br/generate-input-field "number-of-websites" "The Number of websites running on your cluster" "5"))) + (br/generate-input-field "issuer" "(Optional) Your issuer prod/staging:" ""))) (generate-group "credentials" (br/generate-text-area @@ -46,7 +41,7 @@ "3")) [(br/generate-br)] (br/generate-button "generate-button" "Generate c4k yaml")))] - (br/generate-output "c4k-website-output" "Your c4k deployment.yaml:" "25"))) + (br/generate-output "c4k-website-output" "Your c4k deployment.yaml:" "15"))) (defn generate-content-div [] @@ -58,18 +53,13 @@ (defn config-from-document [] (let [issuer (br/get-content-from-element "issuer" :optional true)] (merge - {:fqdn (br/get-content-from-element "fqdn") - :volume-total-storage-size (br/get-content-from-element "volume-total-storage-size" :deserializer js/parseInt) - :number-of-websites (br/get-content-from-element "number-of-websites" :deserializer js/parseInt)} + {:fqdn (br/get-content-from-element "fqdn")} (when (not (st/blank? issuer)) - {:issuer issuer}) - ))) + {:issuer issuer})))) (defn validate-all! [] - (br/validate! "fqdn" ::website/fqdn) + (br/validate! "fqdn" ::website/fqdn) (br/validate! "issuer" ::website/issuer :optional true) - (br/validate! "volume-total-storage-size" ::website/volume-total-storage-size :deserializer js/parseInt) - (br/validate! "number-of-websites" ::website/number-of-websites :deserializer js/parseInt) (br/validate! "auth" core/auth? :deserializer edn/read-string) (br/set-form-validated!)) @@ -87,11 +77,9 @@ (-> (cm/generate-common (config-from-document) (br/get-content-from-element "auth" :deserializer edn/read-string) - website/config-defaults + core/config-defaults core/k8s-objects) (br/set-output!))))) (add-validate-listener "fqdn") - (add-validate-listener "volume-total-storage-size") (add-validate-listener "issuer") - (add-validate-listener "number-of-websites") - (add-validate-listener "auth")) \ No newline at end of file + (add-validate-listener "auth")) diff --git a/src/test/cljc/dda/c4k_website/website_test.cljc b/src/test/cljc/dda/c4k_website/website_test.cljc index 083e0e3..da52cf0 100644 --- a/src/test/cljc/dda/c4k_website/website_test.cljc +++ b/src/test/cljc/dda/c4k_website/website_test.cljc @@ -7,7 +7,6 @@ [dda.c4k-common.base64 :as b64] [dda.c4k-website.website :as cut])) - (st/instrument `cut/generate-certificate) (st/instrument `cut/generate-ingress) (st/instrument `cut/generate-nginx-configmap) @@ -148,17 +147,10 @@ :authtoken "token2" :gitrepourl "test.com/user/repo.git"}))))) - (deftest should-generate-website-content-volume - (is (= {:storage-c1 "2Gi", - :storage-c2 "10Gi", - :name-c1 "test-de-content-volume", + (is (= {:name-c1 "test-de-content-volume", :name-c2 "test-com-content-volume", :app-c1 "test-de-nginx", :app-c2 "test-com-nginx"} - (th/map-diff (cut/generate-website-content-volume {:fqdn "test.de" - :volume-total-storage-size 10 - :number-of-websites 5}) - (cut/generate-website-content-volume {:fqdn "test.com" - :volume-total-storage-size 50 - :number-of-websites 5}))))) \ No newline at end of file + (th/map-diff (cut/generate-website-content-volume {:fqdn "test.de"}) + (cut/generate-website-content-volume {:fqdn "test.com"})))))