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]
|
|
|
|
#?(:cljs [shadow.resource :as rc])
|
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]
|
2022-05-20 16:18:04 +00:00
|
|
|
[dda.c4k-common.common :as cm]))
|
2021-08-06 15:36:59 +00:00
|
|
|
|
2022-03-19 18:15:06 +00:00
|
|
|
(s/def ::fqdn cp/fqdn-string?)
|
2022-05-11 12:20:43 +00:00
|
|
|
(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?)
|
|
|
|
|
2022-05-20 16:18:04 +00:00
|
|
|
(def strong-config? (s/keys :req-un [::fqdn ::issuer ::pv-storage-size-gb
|
|
|
|
::pvc-storage-class-name]
|
|
|
|
:opt-un [::restic-repository]))
|
2021-08-06 15:36:59 +00:00
|
|
|
|
2023-02-02 12:40:56 +00:00
|
|
|
(def config? (s/keys :req-un [::fqdn]
|
|
|
|
:opt-un [::issuer
|
|
|
|
::restic-repository
|
|
|
|
::pv-storage-size-gb
|
|
|
|
::pvc-storage-class-name]))
|
|
|
|
|
|
|
|
(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
|
|
|
|
::restic-password]))
|
|
|
|
|
2021-08-06 15:36:59 +00:00
|
|
|
#?(:cljs
|
2021-08-10 08:43:04 +00:00
|
|
|
(defmethod yaml/load-resource :nextcloud [resource-name]
|
2021-08-06 15:36:59 +00:00
|
|
|
(case resource-name
|
2021-08-10 08:43:04 +00:00
|
|
|
"nextcloud/deployment.yaml" (rc/inline "nextcloud/deployment.yaml")
|
|
|
|
"nextcloud/pvc.yaml" (rc/inline "nextcloud/pvc.yaml")
|
|
|
|
"nextcloud/service.yaml" (rc/inline "nextcloud/service.yaml")
|
2021-09-15 16:34:40 +00:00
|
|
|
"nextcloud/secret.yaml" (rc/inline "nextcloud/secret.yaml")
|
2021-08-06 15:36:59 +00:00
|
|
|
(throw (js/Error. "Undefined Resource!")))))
|
|
|
|
|
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]
|
2023-02-02 12:29:10 +00:00
|
|
|
(-> (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 "nextcloud"
|
|
|
|
: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
|
|
|
(->
|
2023-02-02 12:29:10 +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 []
|
2023-02-02 12:29:10 +00:00
|
|
|
(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
|
|
|
(->
|
2023-02-02 12:29:10 +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)))))
|