2021-07-09 14:21:17 +00:00
|
|
|
(ns dda.c4k-common.postgres
|
|
|
|
(:require
|
|
|
|
[clojure.spec.alpha :as s]
|
2021-11-05 14:16:04 +00:00
|
|
|
#?(:clj [orchestra.core :refer [defn-spec]]
|
|
|
|
:cljs [orchestra.core :refer-macros [defn-spec]])
|
2024-02-20 16:08:39 +00:00
|
|
|
[dda.c4k-common.postgres.postgres-internal :as int]))
|
2021-07-09 14:21:17 +00:00
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
(def postgres-size? int/postgres-size?)
|
2021-09-13 07:05:08 +00:00
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
(def postgres-image? int/postgres-image?)
|
2021-11-05 15:18:37 +00:00
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
(s/def ::postgres-db-user ::int/postgres-db-user)
|
|
|
|
(s/def ::postgres-db-password ::int/postgres-db-password)
|
|
|
|
(s/def ::postgres-data-volume-path ::int/postgres-data-volume-path)
|
|
|
|
(s/def ::postgres-size ::int/postgres-size)
|
|
|
|
(s/def ::db-name ::int/db-name)
|
|
|
|
(s/def ::pvc-storage-class-name ::int/pvc-storage-class-name)
|
|
|
|
(s/def ::pv-storage-size-gb ::int/pv-storage-size-gb)
|
2023-01-27 09:32:47 +00:00
|
|
|
|
|
|
|
(def pg-config?
|
|
|
|
(s/keys :opt-un [::postgres-size ::db-name ::postgres-data-volume-path
|
2022-02-12 17:28:35 +00:00
|
|
|
::pvc-storage-class-name ::pv-storage-size-gb]))
|
2023-01-27 09:32:47 +00:00
|
|
|
(def pg-auth?
|
2021-11-05 18:35:16 +00:00
|
|
|
(s/keys :opt-un [::postgres-db-user ::postgres-db-password]))
|
2021-07-09 14:21:17 +00:00
|
|
|
|
2021-11-05 14:16:04 +00:00
|
|
|
(def postgres-function (s/keys :opt-un [::deserializer ::optional]))
|
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
(def default-config {:postgres-image "postgres:13"
|
|
|
|
:postgres-size :2gb
|
|
|
|
:db-name "postgres"
|
|
|
|
:postgres-data-volume-path "/var/postgres"
|
|
|
|
:pv-storage-size-gb 10
|
|
|
|
:pvc-storage-class-name "manual"})
|
2021-07-09 14:53:38 +00:00
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
|
|
|
|
(defn-spec generate-config map?
|
2021-11-05 18:35:16 +00:00
|
|
|
[& config (s/? pg-config?)]
|
2024-02-20 16:08:39 +00:00
|
|
|
(let [final-config (merge default-config
|
|
|
|
(first config))]
|
|
|
|
(int/generate-config final-config)))
|
|
|
|
|
|
|
|
|
|
|
|
(defn-spec generate-deployment map?
|
2021-11-05 18:35:16 +00:00
|
|
|
[& config (s/? pg-config?)]
|
2024-02-20 16:08:39 +00:00
|
|
|
(let [final-config (merge default-config
|
|
|
|
(first config))]
|
|
|
|
(int/generate-deployment final-config)))
|
2021-07-09 14:21:17 +00:00
|
|
|
|
2024-02-20 16:08:39 +00:00
|
|
|
|
|
|
|
(defn-spec generate-persistent-volume map?
|
2021-11-05 15:18:37 +00:00
|
|
|
[config pg-config?]
|
2024-02-20 16:08:39 +00:00
|
|
|
(let [final-config (merge default-config
|
|
|
|
config)]
|
|
|
|
(int/generate-persistent-volume final-config)))
|
|
|
|
|
|
|
|
|
|
|
|
(defn-spec generate-pvc map?
|
2022-02-12 17:28:35 +00:00
|
|
|
[config pg-config?]
|
2024-02-20 16:08:39 +00:00
|
|
|
(let [final-config (merge default-config
|
|
|
|
config)]
|
|
|
|
(int/generate-pvc final-config)))
|
|
|
|
|
|
|
|
|
|
|
|
(defn-spec generate-secret map?
|
|
|
|
[my-auth pg-auth?]
|
|
|
|
(int/generate-secret my-auth))
|
|
|
|
|
|
|
|
|
|
|
|
(defn-spec generate-service map?
|
2021-11-05 15:18:37 +00:00
|
|
|
[]
|
2024-02-20 16:08:39 +00:00
|
|
|
(int/generate-service))
|
2024-02-20 16:33:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
(defn-spec generate seq?
|
|
|
|
[config pg-config?
|
|
|
|
auth pg-auth?]
|
|
|
|
(let [final-config (merge default-config
|
|
|
|
config)]
|
|
|
|
[(int/generate-secret auth)
|
|
|
|
(int/generate-persistent-volume final-config)
|
|
|
|
(int/generate-config final-config)
|
|
|
|
(int/generate-pvc final-config)
|
|
|
|
(int/generate-deployment final-config)
|
|
|
|
(int/generate-service)]))
|