Breaking-Change: generate-pvc now needs a config.

introduced storage-size & storage-class-name
merge-requests/1/merge
jerger 2 years ago
parent 5464c8428a
commit 4cfe791e85

@ -1,4 +1,4 @@
(defproject org.domaindrivenarchitecture/c4k-common-cljs "1.0.1-SNAPSHOT"
(defproject org.domaindrivenarchitecture/c4k-common-cljs "1.1.0-SNAPSHOT"
:description "Contains predicates and tools for c4k"
:url "https://domaindrivenarchitecture.org"
:license {:name "Apache License, Version 2.0"

@ -1,4 +1,4 @@
(defproject org.domaindrivenarchitecture/c4k-common-clj "1.0.1-SNAPSHOT"
(defproject org.domaindrivenarchitecture/c4k-common-clj "1.1.0-SNAPSHOT"
:description "Contains predicates and tools for c4k"
:url "https://domaindrivenarchitecture.org"
:license {:name "Apache License, Version 2.0"

@ -1,6 +1,7 @@
(ns dda.c4k-common.common
(:require
[clojure.walk]
[clojure.spec.alpha :as s]
#?(:clj [orchestra.core :refer [defn-spec]]
:cljs [orchestra.core :refer-macros [defn-spec]])
[dda.c4k-common.predicate :as cp]))
@ -50,3 +51,8 @@
value-to-replace
%)
coll))
(defn-spec concat-vec vector?
[& vs (s/* seq?)]
(into []
(apply concat vs)))

@ -22,8 +22,11 @@
(s/def ::postgres-data-volume-path string?)
(s/def ::postgres-size postgres-size?)
(s/def ::db-name cp/bash-env-string?)
(s/def ::pvc-storage-class-name cp/pvc-storage-class-name?)
(s/def ::pv-storage-size-gb pos?)
(defn pg-config? [input]
(s/keys :opt-un [::postgres-size ::db-name ::postgres-data-volume-path]))
(s/keys :opt-un [::postgres-size ::db-name ::postgres-data-volume-path
::pvc-storage-class-name ::pv-storage-size-gb]))
(defn pg-auth? [input]
(s/keys :opt-un [::postgres-db-user ::postgres-db-password]))
@ -53,7 +56,7 @@
(str "postgres/config-" (name postgres-size) ".yaml")))
(assoc-in [:data :postgres-db] db-name))))
; TODO: why do we need a sequence of configs?
(defn-spec generate-deployment cp/map-or-seq?
[& config (s/? pg-config?)]
(let [{:keys [postgres-image]
@ -64,14 +67,23 @@
(defn-spec generate-persistent-volume cp/map-or-seq?
[config pg-config?]
(let [{:keys [postgres-data-volume-path]} config]
(let [{:keys [postgres-data-volume-path pv-storage-size-gb]
:or {postgres-data-volume-path "/var/postgres"
pv-storage-size-gb 10}} config]
(->
(yaml/from-string (yaml/load-resource "postgres/persistent-volume.yaml"))
(assoc-in [:spec :hostPath :path] postgres-data-volume-path))))
(assoc-in [:spec :hostPath :path] postgres-data-volume-path)
(assoc-in [:spec :capacity :storage] (str pv-storage-size-gb "Gi")))))
(defn-spec generate-pvc cp/map-or-seq?
[]
(yaml/from-string (yaml/load-resource "postgres/pvc.yaml")))
[config pg-config?]
(let [{:keys [pv-storage-size-gb pvc-storage-class-name]
:or {pv-storage-size-gb 10
pvc-storage-class-name :manual}} config]
(->
(yaml/from-string (yaml/load-resource "postgres/pvc.yaml"))
(assoc-in [:spec :resources :requests :storage] (str pv-storage-size-gb "Gi"))
(assoc-in [:spec :storageClassName] (name pvc-storage-class-name)))))
(defn-spec generate-secret cp/map-or-seq?
[my-auth any?]

@ -16,4 +16,8 @@
(defn map-or-seq?
[input]
(or (map? input) (seq? input)))
(or (map? input) (seq? input)))
(defn pvc-storage-class-name?
[input]
(contains? #{:manual :local-path} input))

@ -5,9 +5,9 @@ metadata:
labels:
app: postgres
spec:
storageClassName: manual
storageClassName: REPLACEME
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storage: REPLACEME

@ -37,7 +37,39 @@
:accessModes ["ReadWriteOnce"]
:capacity {:storage "10Gi"}
:hostPath {:path "xx"}}}
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"}))))
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"})))
(is (= {:kind "PersistentVolume"
:apiVersion "v1"
:metadata
{:name "postgres-pv-volume", :labels {:type "local"}}
:spec
{:storageClassName "manual"
:accessModes ["ReadWriteOnce"]
:capacity {:storage "20Gi"}
:hostPath {:path "xx"}}}
(cut/generate-persistent-volume {:postgres-data-volume-path "xx"
:pv-storage-size-gb 20}))))
(deftest should-generate-persistent-volume-claim
(is (= {:apiVersion "v1"
:kind "PersistentVolumeClaim"
:metadata
{:name "postgres-claim", :labels {:app "postgres"}}
:spec
{:storageClassName "manual"
:accessModes ["ReadWriteOnce"]
:resources {:requests {:storage "10Gi"}}}}
(cut/generate-pvc {})))
(is (= {:apiVersion "v1"
:kind "PersistentVolumeClaim"
:metadata
{:name "postgres-claim", :labels {:app "postgres"}}
:spec
{:storageClassName "local-path"
:accessModes ["ReadWriteOnce"]
:resources {:requests {:storage "20Gi"}}}}
(cut/generate-pvc {:pv-storage-size-gb 20
:pvc-storage-class-name :local-path}))))
(deftest should-generate-secret
(is (= {:apiVersion "v1"

Loading…
Cancel
Save