c4k-nextcloud/src/main/cljc/dda/c4k_nextcloud/nextcloud.cljc

73 lines
2.7 KiB
Text
Raw Normal View History

2021-08-10 08:43:04 +00:00
(ns dda.c4k-nextcloud.nextcloud
2021-08-06 15:36:59 +00:00
(:require
[clojure.spec.alpha :as s]
2022-03-18 11:33:07 +00:00
#?(:clj [orchestra.core :refer [defn-spec]]
:cljs [orchestra.core :refer-macros [defn-spec]])
2021-08-06 15:36:59 +00:00
[dda.c4k-common.yaml :as yaml]
2023-02-03 09:48:03 +00:00
[dda.c4k-common.ingress :as ing]
2021-09-15 16:34:40 +00:00
[dda.c4k-common.base64 :as b64]
2021-11-12 10:11:14 +00:00
[dda.c4k-common.predicate :as cp]
2023-02-02 12:40:56 +00:00
[dda.c4k-common.postgres :as postgres]
2023-02-03 11:07:00 +00:00
[dda.c4k-common.common :as cm]
2024-02-23 16:36:08 +00:00
[dda.c4k-common.monitoring :as mon]
#?(:cljs [dda.c4k-common.macros :refer-macros [inline-resources]])))
2021-08-06 15:36:59 +00:00
2022-03-19 18:15:06 +00:00
(s/def ::fqdn cp/fqdn-string?)
(s/def ::issuer cp/letsencrypt-issuer?)
2021-08-10 08:43:04 +00:00
(s/def ::restic-repository string?)
2021-09-15 16:34:40 +00:00
(s/def ::nextcloud-admin-user cp/bash-env-string?)
(s/def ::nextcloud-admin-password cp/bash-env-string?)
2022-03-18 11:13:40 +00:00
(s/def ::pvc-storage-class-name cp/pvc-storage-class-name?)
(s/def ::pv-storage-size-gb pos?)
2023-02-02 12:40:56 +00:00
(def config? (s/keys :req-un [::fqdn]
:opt-un [::issuer
::restic-repository
::pv-storage-size-gb
2023-02-03 11:07:00 +00:00
::pvc-storage-class-name
::mon/mon-cfg]))
2023-02-02 12:40:56 +00:00
(def auth? (s/keys :req-un [::postgres/postgres-db-user ::postgres/postgres-db-password
::nextcloud-admin-user ::nextcloud-admin-password
::aws-access-key-id ::aws-secret-access-key
2023-02-03 11:07:00 +00:00
::restic-password]
:opt-un [::mon/mon-auth]))
2023-02-02 12:40:56 +00:00
2021-08-06 15:36:59 +00:00
#?(:cljs
2021-08-10 08:43:04 +00:00
(defmethod yaml/load-resource :nextcloud [resource-name]
2024-02-23 16:36:08 +00:00
(get (inline-resources "nextcloud") resource-name)))
2021-08-06 15:36:59 +00:00
2023-02-03 09:32:04 +00:00
(defn-spec generate-deployment cp/map-or-seq?
[config config?]
2021-08-06 15:36:59 +00:00
(let [{:keys [fqdn]} config]
(-> (yaml/load-as-edn "nextcloud/deployment.yaml")
2021-08-10 12:34:17 +00:00
(cm/replace-all-matching-values-by-new-value "fqdn" fqdn))))
2021-08-06 15:36:59 +00:00
2023-02-03 10:51:22 +00:00
(defn-spec generate-ingress-and-cert cp/map-or-seq?
2023-02-03 09:32:04 +00:00
[config config?]
2023-02-03 09:48:03 +00:00
(ing/generate-ingress-and-cert
(merge
{:service-name "cloud-service"
2023-02-03 09:48:03 +00:00
:service-port 80
:fqdns [(:fqdn config)]}
config)))
2021-08-06 15:36:59 +00:00
2022-03-18 11:13:40 +00:00
(defn-spec generate-pvc cp/map-or-seq?
2022-05-20 16:18:04 +00:00
[config (s/keys :req-un [::pv-storage-size-gb ::pvc-storage-class-name])]
2022-03-18 13:28:20 +00:00
(let [{:keys [pv-storage-size-gb pvc-storage-class-name]} config]
2022-03-18 11:13:40 +00:00
(->
(yaml/load-as-edn "nextcloud/pvc.yaml")
2022-03-18 11:13:40 +00:00
(assoc-in [:spec :resources :requests :storage] (str pv-storage-size-gb "Gi"))
(assoc-in [:spec :storageClassName] (name pvc-storage-class-name)))))
2021-08-06 15:36:59 +00:00
(defn generate-service []
(yaml/load-as-edn "nextcloud/service.yaml"))
2021-09-15 16:34:40 +00:00
2023-02-03 09:32:04 +00:00
(defn-spec generate-secret cp/map-or-seq?
2023-02-03 10:51:22 +00:00
[auth auth?]
(let [{:keys [nextcloud-admin-user nextcloud-admin-password]} auth]
2021-09-15 16:34:40 +00:00
(->
(yaml/load-as-edn "nextcloud/secret.yaml")
2021-09-15 16:34:40 +00:00
(cm/replace-key-value :nextcloud-admin-user (b64/encode nextcloud-admin-user))
(cm/replace-key-value :nextcloud-admin-password (b64/encode nextcloud-admin-password)))))