From dcbcd530686928ac893327189b5f50b53c653a03 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 10 Mar 2025 14:29:35 +0100
Subject: [PATCH 1/9] update versions

---
 project.clj | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/project.clj b/project.clj
index 0a84d2a..4b63c96 100644
--- a/project.clj
+++ b/project.clj
@@ -4,7 +4,7 @@
   :license {:name "Apache License, Version 2.0"
             :url "https://www.apache.org/licenses/LICENSE-2.0.html"}
   :dependencies [[org.clojure/clojure "1.12.0"]
-                 [org.clojure/tools.reader "1.5.0"]
+                 [org.clojure/tools.reader "1.5.2"]
                  [aero "1.1.6"]
                  [orchestra "2021.01.01-1"]
                  [expound "0.9.0"]
@@ -27,9 +27,9 @@
                        :main dda.c4k-common.uberjar
                        :uberjar-name "c4k-common-standalone.jar"
                        :dependencies [[org.clojure/tools.cli "1.1.230"]
-                                      [ch.qos.logback/logback-classic "1.5.16"
+                                      [ch.qos.logback/logback-classic "1.5.17"
                                        :exclusions [com.sun.mail/javax.mail]]
-                                      [org.slf4j/jcl-over-slf4j "2.0.16"]]}}
+                                      [org.slf4j/jcl-over-slf4j "2.0.17"]]}}
   :release-tasks [["test"]
                   ["vcs" "assert-committed"]
                   ["change" "version" "leiningen.release/bump-version" "release"]

From 991cf57c4f31f22e9bd2911d05d4f986f50375f6 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 10 Mar 2025 14:36:34 +0100
Subject: [PATCH 2/9] add pgw

---
 src/main/cljc/dda/c4k_common/monitoring.cljc  | 28 ++--------
 .../monitoring/monitoring_internal.cljc       |  3 ++
 .../monitoring/push-gw-deployment.yaml        | 52 +++++++++++++++++++
 .../monitoring/push-gw-service-account.yaml   |  8 +++
 .../resources/monitoring/push-gw-service.yaml | 16 ++++++
 .../cljc/dda/c4k_common/monitoring_test.cljc  |  4 +-
 6 files changed, 84 insertions(+), 27 deletions(-)
 create mode 100644 src/main/resources/monitoring/push-gw-deployment.yaml
 create mode 100644 src/main/resources/monitoring/push-gw-service-account.yaml
 create mode 100644 src/main/resources/monitoring/push-gw-service.yaml

diff --git a/src/main/cljc/dda/c4k_common/monitoring.cljc b/src/main/cljc/dda/c4k_common/monitoring.cljc
index 9c8d788..3190294 100644
--- a/src/main/cljc/dda/c4k_common/monitoring.cljc
+++ b/src/main/cljc/dda/c4k_common/monitoring.cljc
@@ -20,29 +20,6 @@
 
 (def filter-regex-string int/filter-regex-string)
 
-
-(defn-spec ^{:deprecated "6.4.1"} generate seq?
-  "use generate-config and generate-auth instead"
-  [config ::mon-cfg
-   auth ::mon-auth]
-  [(yaml/load-as-edn "monitoring/namespace.yaml")
-   (yaml/load-as-edn "monitoring/prometheus-cluster-role.yaml")
-   (yaml/load-as-edn "monitoring/prometheus-cluster-role-binding.yaml")
-   (yaml/load-as-edn "monitoring/prometheus-service.yaml")
-   (yaml/load-as-edn "monitoring/prometheus-service-account.yaml")
-   (int/generate-config-secret config auth)
-   (yaml/load-as-edn "monitoring/prometheus-deployment.yaml")
-   (yaml/load-as-edn "monitoring/node-exporter-service-account.yaml")
-   (yaml/load-as-edn "monitoring/node-exporter-cluster-role.yaml")
-   (yaml/load-as-edn "monitoring/node-exporter-cluster-role-binding.yaml")
-   (yaml/load-as-edn "monitoring/node-exporter-daemon-set.yaml")
-   (yaml/load-as-edn "monitoring/node-exporter-service.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role-binding.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-deployment.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-service-account.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")])
-
 (defn-spec generate-config seq?
   []
   [(yaml/load-as-edn "monitoring/namespace.yaml")
@@ -60,7 +37,10 @@
    (yaml/load-as-edn "monitoring/kube-state-metrics-cluster-role.yaml")
    (yaml/load-as-edn "monitoring/kube-state-metrics-deployment.yaml")
    (yaml/load-as-edn "monitoring/kube-state-metrics-service-account.yaml")
-   (yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")])
+   (yaml/load-as-edn "monitoring/kube-state-metrics-service.yaml")   
+   (yaml/load-as-edn "monitoring/push-gw-deployment.yaml")
+   (yaml/load-as-edn "monitoring/push-gw-service-account.yaml")
+   (yaml/load-as-edn "monitoring/push-gw-service.yaml")])
 
 (defn-spec generate-auth seq?
   [config ::mon-cfg
diff --git a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
index 651fead..bb99208 100644
--- a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
+++ b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
@@ -31,6 +31,9 @@
        "monitoring/prometheus-prometheus.yaml"                   (rc/inline "monitoring/prometheus-prometheus.yaml")
        "monitoring/prometheus-service-account.yaml"              (rc/inline "monitoring/prometheus-service-account.yaml")
        "monitoring/prometheus-service.yaml"                      (rc/inline "monitoring/prometheus-service.yaml")
+       "monitoring/push-gw-deployment.yaml"                      (rc/inline "monitoring/push-gw-deployment.yaml")
+       "monitoring/push-gw-service-account.yaml"                 (rc/inline "monitoring/push-gw-service-account.yaml")
+       "monitoring/push-gw-service.yaml"                         (rc/inline "monitoring/push-gw-service.yaml")
        (throw (js/Error. (str "Undefined Resource: " resource-name))))))
 
 
diff --git a/src/main/resources/monitoring/push-gw-deployment.yaml b/src/main/resources/monitoring/push-gw-deployment.yaml
new file mode 100644
index 0000000..e1cc2f1
--- /dev/null
+++ b/src/main/resources/monitoring/push-gw-deployment.yaml
@@ -0,0 +1,52 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/name: prometheus-pushgateway
+  name: prometheus-pushgateway
+  namespace: monitoring
+spec:
+  replicas: 1
+  strategy:
+    type: Recreate
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: prometheus-pushgateway
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/name: prometheus-pushgateway
+    spec:
+      serviceAccountName: prometheus-pushgateway
+      automountServiceAccountToken: true
+      containers:
+        - name: pushgateway
+          image: "quay.io/prometheus/pushgateway:v1.11.0"
+          imagePullPolicy: IfNotPresent
+          ports:
+            - name: metrics
+              containerPort: 9091
+              protocol: TCP
+          livenessProbe:
+            httpGet:
+              path: /-/healthy
+              port: 9091
+            initialDelaySeconds: 10
+            timeoutSeconds: 10
+          readinessProbe:
+            httpGet:
+              path: /-/ready
+              port: 9091
+            initialDelaySeconds: 10
+            timeoutSeconds: 10
+          volumeMounts:
+            - name: storage-volume
+              mountPath: "/data"
+              subPath: ""
+      securityContext:
+        fsGroup: 65534
+        runAsNonRoot: true
+        runAsUser: 65534
+      volumes:
+        - name: storage-volume
+          emptyDir: {}
diff --git a/src/main/resources/monitoring/push-gw-service-account.yaml b/src/main/resources/monitoring/push-gw-service-account.yaml
new file mode 100644
index 0000000..c223e65
--- /dev/null
+++ b/src/main/resources/monitoring/push-gw-service-account.yaml
@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  labels:
+    app.kubernetes.io/name: prometheus-pushgateway
+  name: x-prometheus-pushgateway
+  namespace: monitoring
+automountServiceAccountToken: true
\ No newline at end of file
diff --git a/src/main/resources/monitoring/push-gw-service.yaml b/src/main/resources/monitoring/push-gw-service.yaml
new file mode 100644
index 0000000..0f5188e
--- /dev/null
+++ b/src/main/resources/monitoring/push-gw-service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/name: prometheus-pushgateway
+  name: prometheus-pushgateway
+  namespace: monitoring
+spec:
+  type: ClusterIP
+  ports:
+    - port: 9091
+      targetPort: 9091
+      protocol: TCP
+      name: http
+  selector:
+    app.kubernetes.io/name: prometheus-pushgateway
\ No newline at end of file
diff --git a/src/test/cljc/dda/c4k_common/monitoring_test.cljc b/src/test/cljc/dda/c4k_common/monitoring_test.cljc
index 1efc434..346d776 100644
--- a/src/test/cljc/dda/c4k_common/monitoring_test.cljc
+++ b/src/test/cljc/dda/c4k_common/monitoring_test.cljc
@@ -19,9 +19,7 @@
 
 
 (deftest should-generate
-  (is (= 17
-         (count (cut/generate conf auth))))
-  (is (= 16
+  (is (= 19
          (count (cut/generate-config))))
   (is (= 1
          (count (cut/generate-auth conf auth)))))

From f99a0dd747d0a1d0bd01a9dc460a0bf0f60a434a Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 10 Mar 2025 14:57:15 +0100
Subject: [PATCH 3/9] add load-and-adjust-ns-helper

---
 src/main/cljc/dda/c4k_common/namespace.cljc     |  9 +++++++++
 .../cljc/dda/c4k_common/namespace_test.cljc     | 17 ++++++++++++++++-
 src/test/resources/namespace-test/dummy.yaml    |  5 +++++
 3 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 src/test/resources/namespace-test/dummy.yaml

diff --git a/src/main/cljc/dda/c4k_common/namespace.cljc b/src/main/cljc/dda/c4k_common/namespace.cljc
index 0e8638a..17d5bc6 100644
--- a/src/main/cljc/dda/c4k_common/namespace.cljc
+++ b/src/main/cljc/dda/c4k_common/namespace.cljc
@@ -3,6 +3,8 @@
    #?(:clj [orchestra.core :refer [defn-spec]]
       :cljs [orchestra.core :refer-macros [defn-spec]])
    [clojure.spec.alpha :as s]
+   [dda.c4k-common.predicate :as cp]
+   [dda.c4k-common.yaml :as yaml]
    [dda.c4k-common.namespace.namespace-internal :as int]))
 
 (s/def ::namespace ::int/namespace)
@@ -17,3 +19,10 @@
   (let [final-config (merge default-config
                             config)]
     [(int/generate-namespace final-config)]))
+
+(defn-spec load-and-adjust-namespace cp/map-or-seq?
+  [file string?
+   namespace ::namespace]
+  (->
+   (yaml/load-as-edn file)
+   (assoc-in [:metadata :namespace] namespace)))
diff --git a/src/test/cljc/dda/c4k_common/namespace_test.cljc b/src/test/cljc/dda/c4k_common/namespace_test.cljc
index f400516..5f1f2ca 100644
--- a/src/test/cljc/dda/c4k_common/namespace_test.cljc
+++ b/src/test/cljc/dda/c4k_common/namespace_test.cljc
@@ -2,10 +2,18 @@
   (:require
    #?(:clj [clojure.test :refer [deftest is are testing run-tests]]
       :cljs [cljs.test :refer-macros [deftest is are testing run-tests]])
+   #?(:cljs [shadow.resource :as rc])
    [clojure.spec.test.alpha :as st]
    [dda.c4k-common.namespace :as cut]))
 
 (st/instrument `cut/generate)
+(st/instrument `cut/load-and-adjust-namespace)
+
+#?(:cljs
+   (defmethod yaml/load-resource :namespace-test [resource-name]
+     (case resource-name
+       "namespace-test/dummy.yaml" (rc/inline "namespace-test/dummy.yaml")
+       (throw (js/Error. (str "Undefined Resource: " resource-name))))))
 
 (deftest should-generate-simple-ingress
   (is (= [{:apiVersion "v1" 
@@ -15,4 +23,11 @@
   (is (= [{:apiVersion "v1"
            :kind "Namespace"
            :metadata {:name "myapp"}}]
-         (cut/generate {:namespace "myapp"}))))
\ No newline at end of file
+         (cut/generate {:namespace "myapp"}))))
+
+(deftest should-load-and-replace-ns
+  (is (= {:apiVersion "v1"
+          :kind "Dummy"
+          :metadata {:name "dummy" 
+                     :namespace "xy"}}
+         (cut/load-and-adjust-namespace "namespace-test/dummy.yaml" "xy"))))
\ No newline at end of file
diff --git a/src/test/resources/namespace-test/dummy.yaml b/src/test/resources/namespace-test/dummy.yaml
new file mode 100644
index 0000000..cf7f183
--- /dev/null
+++ b/src/test/resources/namespace-test/dummy.yaml
@@ -0,0 +1,5 @@
+apiVersion: v1
+kind: Dummy
+metadata:
+  name: dummy
+  namespace: default
\ No newline at end of file

From 28e9609b9aef8506c4865f898ea4b3aaced7146f Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 10 Mar 2025 16:53:50 +0100
Subject: [PATCH 4/9] define scraping

---
 src/main/resources/monitoring/prometheus-prometheus.yaml   | 5 +++++
 src/main/resources/monitoring/push-gw-service-account.yaml | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/main/resources/monitoring/prometheus-prometheus.yaml b/src/main/resources/monitoring/prometheus-prometheus.yaml
index 2ffa360..7c1b917 100644
--- a/src/main/resources/monitoring/prometheus-prometheus.yaml
+++ b/src/main/resources/monitoring/prometheus-prometheus.yaml
@@ -62,3 +62,8 @@ scrape_configs:
   - job_name: "prometheus"
     static_configs:
       - targets: ["localhost:9090"]
+
+  - job_name: pushgateway
+    honor_labels: true
+    static_configs:
+    - targets: ['prometheus-pushgateway:9091']
diff --git a/src/main/resources/monitoring/push-gw-service-account.yaml b/src/main/resources/monitoring/push-gw-service-account.yaml
index c223e65..823e410 100644
--- a/src/main/resources/monitoring/push-gw-service-account.yaml
+++ b/src/main/resources/monitoring/push-gw-service-account.yaml
@@ -3,6 +3,6 @@ kind: ServiceAccount
 metadata:
   labels:
     app.kubernetes.io/name: prometheus-pushgateway
-  name: x-prometheus-pushgateway
+  name: prometheus-pushgateway
   namespace: monitoring
 automountServiceAccountToken: true
\ No newline at end of file

From f123ca408df27a8b7682bf35d3d0493514876210 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Mon, 10 Mar 2025 16:54:04 +0100
Subject: [PATCH 5/9] add backup metrics

---
 .../cljc/dda/c4k_common/monitoring/monitoring_internal.cljc    | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
index bb99208..ec2a36b 100644
--- a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
+++ b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
@@ -61,7 +61,8 @@
                                        "traefik_tls_certs_not_after")
                    :kube-state-regex (str "kube_pod_container_status_restarts_total|"
                                           "kube_pod_status_reason|kube_node_status_capacity|kube_node_status_allocatable|"
-                                          "kube_cronjob_status_active|kube_job_status_failed")})
+                                          "kube_cronjob_status_active|kube_job_status_failed")
+                   :backup-regex (str "backup_*")})
 
 (def filter-regex-string
   (str/join "|" (vals metric-regex)))

From 5b57ff4c3f033f0572b4c903eb19180796bb407a Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Tue, 11 Mar 2025 16:21:30 +0100
Subject: [PATCH 6/9] forward backup metrics

---
 .../cljc/dda/c4k_common/monitoring/monitoring_internal.cljc    | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
index ec2a36b..20efb51 100644
--- a/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
+++ b/src/main/cljc/dda/c4k_common/monitoring/monitoring_internal.cljc
@@ -61,8 +61,7 @@
                                        "traefik_tls_certs_not_after")
                    :kube-state-regex (str "kube_pod_container_status_restarts_total|"
                                           "kube_pod_status_reason|kube_node_status_capacity|kube_node_status_allocatable|"
-                                          "kube_cronjob_status_active|kube_job_status_failed")
-                   :backup-regex (str "backup_*")})
+                                          "kube_cronjob_status_active|kube_job_.*")})
 
 (def filter-regex-string
   (str/join "|" (vals metric-regex)))

From 54fcc08d1b02c6a38e435e673a142f62bba9766e Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Tue, 11 Mar 2025 16:46:07 +0100
Subject: [PATCH 7/9] update monitoring versions

---
 .../resources/monitoring/kube-state-metrics-deployment.yaml   | 4 +---
 src/main/resources/monitoring/prometheus-deployment.yaml      | 2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/main/resources/monitoring/kube-state-metrics-deployment.yaml b/src/main/resources/monitoring/kube-state-metrics-deployment.yaml
index 6c1b543..6633eb2 100644
--- a/src/main/resources/monitoring/kube-state-metrics-deployment.yaml
+++ b/src/main/resources/monitoring/kube-state-metrics-deployment.yaml
@@ -4,7 +4,6 @@ metadata:
   labels:
     app.kubernetes.io/component: exporter
     app.kubernetes.io/name: kube-state-metrics
-    app.kubernetes.io/version: 2.7.0
   name: kube-state-metrics
   namespace: monitoring
 spec:
@@ -17,13 +16,12 @@ spec:
       labels:
         app.kubernetes.io/component: exporter
         app.kubernetes.io/name: kube-state-metrics
-        app.kubernetes.io/version: 2.7.0
     spec:
       serviceAccountName: kube-state-metrics
       automountServiceAccountToken: true
       containers:
       - name: kube-state-metrics
-        image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.7.0
+        image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0
         livenessProbe:
           httpGet:
             path: /healthz
diff --git a/src/main/resources/monitoring/prometheus-deployment.yaml b/src/main/resources/monitoring/prometheus-deployment.yaml
index f961a0d..aec7587 100644
--- a/src/main/resources/monitoring/prometheus-deployment.yaml
+++ b/src/main/resources/monitoring/prometheus-deployment.yaml
@@ -19,7 +19,7 @@ spec:
       enableServiceLinks: true
       containers:
         - name: prometheus
-          image: "quay.io/prometheus/prometheus:v2.39.1"
+          image: "quay.io/prometheus/prometheus:v3.2.1"
           imagePullPolicy: "IfNotPresent"
           args:
             - --config.file=/etc/prometheus/prometheus.yaml

From e9aab80843522cbb77016481af33cadaef8fbb20 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Tue, 11 Mar 2025 16:51:02 +0100
Subject: [PATCH 8/9] pyb dev now is green

---
 src/test/cljc/dda/c4k_common/namespace_test.cljc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/test/cljc/dda/c4k_common/namespace_test.cljc b/src/test/cljc/dda/c4k_common/namespace_test.cljc
index 5f1f2ca..2c150ca 100644
--- a/src/test/cljc/dda/c4k_common/namespace_test.cljc
+++ b/src/test/cljc/dda/c4k_common/namespace_test.cljc
@@ -4,6 +4,7 @@
       :cljs [cljs.test :refer-macros [deftest is are testing run-tests]])
    #?(:cljs [shadow.resource :as rc])
    [clojure.spec.test.alpha :as st]
+   [dda.c4k-common.yaml :as yaml]
    [dda.c4k-common.namespace :as cut]))
 
 (st/instrument `cut/generate)

From 69c3989cef03d6eb9d5f7cbb8c1ecf8de6e4f862 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Tue, 11 Mar 2025 16:53:06 +0100
Subject: [PATCH 9/9] ermove deprecated generate fkt

---
 src/main/cljc/dda/c4k_common/postgres.cljc      | 14 --------------
 src/test/cljc/dda/c4k_common/postgres_test.cljc |  4 ----
 2 files changed, 18 deletions(-)

diff --git a/src/main/cljc/dda/c4k_common/postgres.cljc b/src/main/cljc/dda/c4k_common/postgres.cljc
index 64f5fde..4ebc504 100644
--- a/src/main/cljc/dda/c4k_common/postgres.cljc
+++ b/src/main/cljc/dda/c4k_common/postgres.cljc
@@ -79,20 +79,6 @@
                             config)]
     (int/generate-service final-config)))
 
-
-(defn-spec ^{:deprecated "6.4.1"} generate seq?
-  "use generate-config and generate-auth instead"
-  [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-configmap final-config)
-     (int/generate-pvc final-config)
-     (int/generate-deployment final-config)
-     (int/generate-service final-config)]))
-
 (defn-spec generate-config seq?
   [config pg-config?]
   (let [final-config (merge default-config
diff --git a/src/test/cljc/dda/c4k_common/postgres_test.cljc b/src/test/cljc/dda/c4k_common/postgres_test.cljc
index 4e4cb5b..e0a853e 100644
--- a/src/test/cljc/dda/c4k_common/postgres_test.cljc
+++ b/src/test/cljc/dda/c4k_common/postgres_test.cljc
@@ -73,10 +73,6 @@
 
 
 (deftest should-generate
-  (is (= 6
-         (count (cut/generate {}
-                              {:postgres-db-user "user"
-                               :postgres-db-password "password"}))))
   (is (= 5
          (count (cut/generate-config {}))))
   (is (= 1