You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.0 KiB
Clojure
95 lines
3.0 KiB
Clojure
(ns dda.c4k-common.postgres
|
|
(: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.postgres.postgres-internal :as int]))
|
|
|
|
(def postgres-size? int/postgres-size?)
|
|
|
|
(def postgres-image? int/postgres-image?)
|
|
|
|
(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)
|
|
|
|
(def pg-config?
|
|
(s/keys :opt-un [::postgres-size ::db-name ::postgres-data-volume-path
|
|
::pvc-storage-class-name ::pv-storage-size-gb ::ns/namespace]))
|
|
(def pg-auth?
|
|
(s/keys :opt-un [::postgres-db-user ::postgres-db-password]))
|
|
|
|
(def postgres-function (s/keys :opt-un [::deserializer ::optional]))
|
|
|
|
(def default-config (merge ns/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"}))
|
|
|
|
|
|
(defn-spec generate-config map?
|
|
[& config (s/? pg-config?)]
|
|
(let [final-config (merge default-config
|
|
(first config))]
|
|
(int/generate-config final-config)))
|
|
|
|
|
|
(defn-spec generate-deployment map?
|
|
[& config (s/? pg-config?)]
|
|
(let [final-config (merge default-config
|
|
(first config))]
|
|
(int/generate-deployment final-config)))
|
|
|
|
|
|
(defn-spec generate-persistent-volume map?
|
|
[config pg-config?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-persistent-volume final-config)))
|
|
|
|
|
|
(defn-spec generate-pvc map?
|
|
[config pg-config?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-pvc final-config)))
|
|
|
|
|
|
(defn-spec generate-secret map?
|
|
([auth pg-auth?]
|
|
(let [final-config default-config]
|
|
(int/generate-secret final-config auth)))
|
|
([config pg-config?
|
|
auth pg-auth?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-secret final-config auth))))
|
|
|
|
|
|
(defn-spec generate-service map?
|
|
[config pg-config?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
(int/generate-service final-config)))
|
|
|
|
|
|
(defn-spec generate seq?
|
|
[config pg-config?
|
|
auth pg-auth?]
|
|
(let [final-config (merge default-config
|
|
config)]
|
|
[(int/generate-secret final-config 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 final-config)]))
|