From 7498ff42eadd63ed8fb8ae1c2fec6b358a0eb3b8 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Thu, 9 Jan 2025 15:34:02 +0100
Subject: [PATCH] add grafana to provs

---
 src/dda/build/provs.clj              |  4 +++-
 src/dda/build/provs/domain.clj       | 13 ++++++++++---
 test/dda/build/provs/domain_test.clj |  7 ++++++-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/dda/build/provs.clj b/src/dda/build/provs.clj
index 5374d8e..fbe6d9d 100644
--- a/src/dda/build/provs.clj
+++ b/src/dda/build/provs.clj
@@ -18,7 +18,9 @@
 (s/def ::provs (s/merge ::c4k/c4k
                         (s/keys
                          :req-un [::domain/email]
-                         :opt-un [::domain/echo ::domain/k3s-output-filename ::domain/k3s-provision-user])))
+                         :opt-un [::domain/echo ::domain/k3s-output-filename ::domain/k3s-provision-user 
+                                  ::domain/k3s-grafana-user ::domain/k3s-grafana-token
+                                  ::domain/k3s-hcloudApiToken ::domain/k3s-encryptionPassphrase])))
 
 (defn-spec run-provs-server! nil?
   [devops ::provs
diff --git a/src/dda/build/provs/domain.clj b/src/dda/build/provs/domain.clj
index eb77ada..2003f33 100644
--- a/src/dda/build/provs/domain.clj
+++ b/src/dda/build/provs/domain.clj
@@ -18,10 +18,12 @@
 (s/def ::k3s-provision-user pred/bash-env-string?)
 (s/def ::k3s-hcloudApiToken string?)
 (s/def ::k3s-encryptionPassphrase string?)
+(s/def ::k3s-grafana-user string?)
+(s/def ::k3s-grafana-token string?)
 (s/def ::config
   (s/merge ::c4k-d/config
            (s/keys :req-un [::email ::echo ::k3s-output-filename ::k3s-auth-input ::k3s-provision-user]
-                   :opt-un [::k3s-hcloudApiToken ::k3s-encryptionPassphrase])))
+                   :opt-un [::k3s-hcloudApiToken ::k3s-encryptionPassphrase ::k3s-grafana-user ::k3s-grafana-token])))
 
 (s/def ::node
   (s/keys :req-un [::ipv4 ::ipv6]))
@@ -58,7 +60,7 @@
 (defn-spec create-k3s-config ::server-config
   [config ::config
    tf-out ::td/tf-out]
-  (let [{:keys [stage email echo]} config
+  (let [{:keys [stage email echo name module]} config
         letsencrypt-endpoint (if (= stage "prod") "prod" "staging")
         values (:value (:out tf-out))
         {:keys [fqdn ipv4 ipv6]} values]
@@ -75,4 +77,9 @@
         {:hcloudApiToken {:source "PLAIN"
                           :parameter (:k3s-hcloudApiToken config)}
          :encryptionPassphrase {:source "PLAIN"
-                                :parameter (:k3s-encryptionPassphrase config)}}}))))
+                                :parameter (:k3s-encryptionPassphrase config)}}})
+     (when (and (contains? config :k3s-grafana-token)
+                (contains? config :k3s-grafana-user))
+       {:grafana {:user (:k3s-grafana-user config)
+                  :password {:source "PLAIN", :parameter (:k3s-grafana-token config)}
+                  :cluster (str name "-" module)}}))))
diff --git a/test/dda/build/provs/domain_test.clj b/test/dda/build/provs/domain_test.clj
index 8b6e4b7..df4d28c 100644
--- a/test/dda/build/provs/domain_test.clj
+++ b/test/dda/build/provs/domain_test.clj
@@ -33,6 +33,9 @@
           :node {:ipv4 "91.107.220.172", :ipv6 "2a01:4f8:c17:86c6::1"},
           :certmanager {:email "test@test.t", :letsencryptEndpoint "staging"},
           :echo false,
+          :grafana {:user "grafana-user"
+                    :password {:source "PLAIN", :parameter "grafana-token"}
+                    :cluster "dda-backup-"}
           :hetzner
           {:hcloudApiToken {:source "PLAIN", :parameter "hcloud-token"},
            :encryptionPassphrase {:source "PLAIN", :parameter "passphrase"}}}
@@ -50,6 +53,8 @@
            :k3s-provision-user "root"
            :k3s-hcloudApiToken "hcloud-token"
            :k3s-encryptionPassphrase "passphrase"
+           :k3s-grafana-user "grafana-user"
+           :k3s-grafana-token "grafana-token"
            :c4k-config-input "config.yaml"
            :c4k-auth-input "auth.yaml"
            :c4k-output "out.yaml"
@@ -64,7 +69,7 @@
   (is (= {:fqdn "cloud.test.meissa.de",
           :node {:ipv4 "91.107.220.172", :ipv6 "2a01:4f8:c17:86c6::1"},
           :certmanager {:email "test@test.t", :letsencryptEndpoint "staging"},
-          :echo false,}
+          :echo false}
          (cut/create-k3s-config
           {:name "dda-backup"
            :project-root-path "../.."