|
53 | 53 |
|
54 | 54 | :imagePullSecrets [{:name "scalardb-ghcr-secret"}]}}) |
55 | 55 |
|
| 56 | +(defn- throw-unsupported-db-error |
| 57 | + [db-type] |
| 58 | + (throw (ex-info "Unsupported DB for ScalarDB Cluster test" {:db db-type}))) |
| 59 | + |
56 | 60 | (defn- update-cluster-values |
57 | 61 | [test values] |
58 | 62 | (let [path [:scalardbCluster :scalardbClusterNodeProperties] |
|
87 | 91 | (defn- install! |
88 | 92 | "Install prerequisites. |
89 | 93 | You should already have installed kind (or similar tool), kubectl and helm." |
90 | | - [] |
91 | | - ;; postgre |
92 | | - (c/exec :helm :repo :add "bitnami" "https://charts.bitnami.com/bitnami") |
| 94 | + [db-type] |
| 95 | + (case db-type |
| 96 | + :postgres (c/exec :helm :repo :add |
| 97 | + "bitnami" "https://charts.bitnami.com/bitnami") |
| 98 | + (throw-unsupported-db-error db-type)) |
93 | 99 | ;; ScalarDB cluster |
94 | 100 | (c/exec :helm :repo :add |
95 | 101 | "scalar-labs" "https://scalar-labs.github.io/helm-charts") |
|
99 | 105 | (c/exec :helm :repo :update)) |
100 | 106 |
|
101 | 107 | (defn- configure! |
102 | | - [test] |
103 | | - (binding [c/*dir* (System/getProperty "user.dir")] |
104 | | - (try |
105 | | - (c/exec :kubectl :delete :secret "scalardb-ghcr-secret") |
| 108 | + [] |
| 109 | + (when (and (seq (env :docker-username)) (seq (env :docker-access-token))) |
| 110 | + (binding [c/*dir* (System/getProperty "user.dir")] |
| 111 | + (try |
| 112 | + (c/exec :kubectl :delete :secret "scalardb-ghcr-secret") |
106 | 113 | ;; ignore the failure when the secret doesn't exist |
107 | | - (catch Exception _)) |
108 | | - (when-let [docker-username (:docker-username test)] |
| 114 | + (catch Exception _)) |
109 | 115 | (c/exec :kubectl :create :secret :docker-registry "scalardb-ghcr-secret" |
110 | 116 | "--docker-server=ghcr.io" |
111 | | - (str "--docker-username=" docker-username) |
112 | | - (str "--docker-password=" (:docker-access-token test))))) |
| 117 | + (str "--docker-username=" (env :docker-username)) |
| 118 | + (str "--docker-password=" (env :docker-access-token))))) |
113 | 119 |
|
114 | 120 | ;; Chaos Mesh |
115 | 121 | (try |
|
118 | 124 | (c/exec :kubectl :create :ns "chaos-mesh")))) |
119 | 125 |
|
120 | 126 | (defn- start! |
121 | | - [test] |
122 | | - ;; postgresql |
123 | | - (c/exec |
124 | | - :helm :install POSTGRESQL_NAME "bitnami/postgresql" |
125 | | - :--set "auth.postgresPassword=postgres" |
126 | | - :--set "primary.persistence.enabled=true" |
127 | | - ;; Need an external IP for storage APIs |
128 | | - :--set "service.type=LoadBalancer" |
129 | | - :--set "primary.service.type=LoadBalancer" |
130 | | - ;; Use legacy images |
131 | | - :--set "image.repository=bitnamilegacy/postgresql" |
132 | | - :--set "volumePermissions.image.repository=bitnamilegacy/os-shell" |
133 | | - :--set "metrics.image.repository=bitnamilegacy/postgres-exporter" |
134 | | - :--set "global.security.allowInsecureImages=true" |
135 | | - :--version "16.7.0") |
| 127 | + [test db-type] |
| 128 | + (case db-type |
| 129 | + :postgres (c/exec |
| 130 | + :helm :install POSTGRESQL_NAME "bitnami/postgresql" |
| 131 | + :--set "auth.postgresPassword=postgres" |
| 132 | + :--set "primary.persistence.enabled=true" |
| 133 | + ;; Need an external IP for storage APIs |
| 134 | + :--set "service.type=LoadBalancer" |
| 135 | + :--set "primary.service.type=LoadBalancer" |
| 136 | + ;; Use legacy images |
| 137 | + :--set "image.repository=bitnamilegacy/postgresql" |
| 138 | + :--set "volumePermissions.image.repository=bitnamilegacy/os-shell" |
| 139 | + :--set "metrics.image.repository=bitnamilegacy/postgres-exporter" |
| 140 | + :--set "global.security.allowInsecureImages=true" |
| 141 | + :--version "16.7.0") |
| 142 | + (throw-unsupported-db-error db-type)) |
136 | 143 |
|
137 | 144 | ;; ScalarDB Cluster |
138 | 145 | (let [chart-version (or (some-> (env :helm-chart-version) not-empty) |
|
168 | 175 | (apply c/exec :rm :-f)) |
169 | 176 | (catch Exception _ nil))) |
170 | 177 | (info "wiping the pods...") |
171 | | - (try (c/exec :helm :uninstall POSTGRESQL_NAME) (catch Exception _ nil)) |
172 | | - (try (c/exec :kubectl :delete |
173 | | - :pvc :-l "app.kubernetes.io/instance=postgresql-scalardb-cluster") |
174 | | - (catch Exception _ nil)) |
175 | | - (try (c/exec :helm :uninstall CLUSTER_NAME) (catch Exception _ nil)) |
176 | | - (try (c/exec :helm :uninstall CLUSTER2_NAME) (catch Exception _ nil)) |
177 | | - (try (c/exec :helm :uninstall "chaos-mesh" :-n "chaos-mesh") |
178 | | - (catch Exception _ nil))) |
| 178 | + (doseq [cmd [[:helm :uninstall POSTGRESQL_NAME] |
| 179 | + [:kubectl :delete |
| 180 | + :pvc :-l "app.kubernetes.io/instance=postgresql-scalardb-cluster"] |
| 181 | + [:helm :uninstall CLUSTER_NAME] |
| 182 | + [:helm :uninstall CLUSTER2_NAME] |
| 183 | + [:helm :uninstall "chaos-mesh" :-n "chaos-mesh"]]] |
| 184 | + (try (apply c/exec cmd) (catch Exception _ nil)))) |
179 | 185 |
|
180 | 186 | (defn- get-pod-list |
181 | 187 | [name] |
|
245 | 251 |
|
246 | 252 | (defn db |
247 | 253 | "Setup ScalarDB Cluster." |
248 | | - [] |
| 254 | + [db-type] |
249 | 255 | (reify |
250 | 256 | db/DB |
251 | 257 | (setup! [_ test _] |
252 | 258 | (when-not (:leave-db-running? test) |
253 | 259 | (wipe!)) |
254 | | - (install!) |
255 | | - (configure! test) |
256 | | - (start! test) |
| 260 | + (install! db-type) |
| 261 | + (configure!) |
| 262 | + (start! test db-type) |
257 | 263 | ;; wait for the pods |
258 | 264 | (wait-for-recovery test)) |
259 | 265 |
|
|
281 | 287 | (log-files [_ test _] |
282 | 288 | (get-logs test)))) |
283 | 289 |
|
284 | | -(defrecord ExtCluster [] |
| 290 | +(defrecord ExtCluster [db-type] |
285 | 291 | ext/DbExtension |
286 | | - (get-db-type [_] :cluster) |
287 | 292 | (live-nodes [_ test] (running-pods? test)) |
288 | 293 | (wait-for-recovery [_ test] (wait-for-recovery test)) |
289 | 294 | (create-table-opts [_ _] {}) |
|
303 | 308 | (mapv create-fn [ip ip2]) |
304 | 309 | (create-fn ip))))) |
305 | 310 | (create-storage-properties [_ _] |
306 | | - (let [node (-> test :nodes first) |
307 | | - ip (c/on node (get-load-balancer-ip POSTGRESQL_NAME))] |
308 | | - (doto (Properties.) |
309 | | - (.setProperty "scalar.db.storage" "jdbc") |
310 | | - (.setProperty "scalar.db.contact_points" |
311 | | - (str "jdbc:postgresql://" ip ":5432/postgres")) |
312 | | - (.setProperty "scalar.db.username" "postgres") |
313 | | - (.setProperty "scalar.db.password" "postgres"))))) |
| 311 | + (let [node (-> test :nodes first)] |
| 312 | + (case db-type |
| 313 | + :postgres (let [ip (c/on node (get-load-balancer-ip POSTGRESQL_NAME))] |
| 314 | + (doto (Properties.) |
| 315 | + (.setProperty "scalar.db.storage" "jdbc") |
| 316 | + (.setProperty "scalar.db.contact_points" |
| 317 | + (str "jdbc:postgresql://" ip ":5432/postgres")) |
| 318 | + (.setProperty "scalar.db.username" "postgres") |
| 319 | + (.setProperty "scalar.db.password" "postgres"))) |
| 320 | + (throw-unsupported-db-error db-type))))) |
314 | 321 |
|
315 | 322 | (defn gen-db |
316 | | - [faults admin] |
| 323 | + [faults admin db-type] |
317 | 324 | (when (seq admin) |
318 | 325 | (warn "The admin operations are ignored: " admin)) |
319 | | - [(ext/extend-db (db) (->ExtCluster)) (n/nemesis-package db 60 faults) 1]) |
| 326 | + (let [db (ext/extend-db (db db-type) (->ExtCluster db-type))] |
| 327 | + [db (n/nemesis-package db 60 faults) 1])) |
0 commit comments