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.
c4k-common/src/main/cljc/dda/c4k_common/postgres.cljc

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)]))