Skip to content

Commit 0f338d4

Browse files
authored
Merge pull request #20 from MaterializeInc/allow-force-db-recreate
Add force database recreate option
2 parents 153b1d5 + 11d57f8 commit 0f338d4

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

main.tf

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ resource "kubernetes_manifest" "materialize_instances" {
7676
environmentdImageRef = "materialize/environmentd:${each.value.environmentd_version}"
7777
backendSecretName = "${each.key}-materialize-backend"
7878
inPlaceRollout = each.value.in_place_rollout
79-
requestRollout = each.value.request_rollout
80-
forceRollout = each.value.force_rollout
79+
requestRollout = lookup(each.value, "request_rollout", null)
80+
forceRollout = lookup(each.value, "force_rollout", null)
8181
environmentdResourceRequirements = {
8282
limits = {
8383
memory = each.value.memory_limit
@@ -109,19 +109,20 @@ resource "kubernetes_manifest" "materialize_instances" {
109109

110110
# Materialize does not currently create databases within the instances, so we need to create them ourselves
111111
resource "kubernetes_job" "db_init_job" {
112-
for_each = { for idx, instance in var.instances : instance.database_name => instance if lookup(instance, "create_database", true) }
112+
for_each = { for idx, instance in var.instances : "${instance.name}-${instance.database_name}" => instance if lookup(instance, "create_database", true) }
113113

114114
metadata {
115-
name = replace("create-db-${each.key}", "_", "-")
115+
name = replace("db-${each.value.database_name}", "_", "-")
116116
namespace = coalesce(each.value.namespace, var.operator_namespace)
117117
}
118118

119119
spec {
120-
backoff_limit = 3
120+
ttl_seconds_after_finished = 3600
121+
backoff_limit = 5
121122
template {
122123
metadata {
123124
labels = {
124-
app = "init-db-${each.key}"
125+
app = "init-db-${each.value.name}"
125126
}
126127
}
127128
spec {
@@ -132,13 +133,40 @@ resource "kubernetes_job" "db_init_job" {
132133
command = [
133134
"/bin/sh",
134135
"-c",
135-
"psql $DATABASE_URL -c \"CREATE DATABASE ${each.key};\""
136+
<<-EOT
137+
# Extract connection details and connect to postgres database
138+
export PGCONNECTION=$(echo $DATABASE_URL | sed 's|/[^/]*$|/postgres|')
139+
140+
echo "Waiting for PostgreSQL to be ready..."
141+
until pg_isready -d $PGCONNECTION; do
142+
sleep 2
143+
done
144+
145+
# Check if database exists
146+
if psql $PGCONNECTION -t -c "SELECT 1 FROM pg_database WHERE datname='${each.value.database_name}';" | grep -q 1; then
147+
echo "Database ${each.value.database_name} already exists."
148+
else
149+
echo "Creating database ${each.value.database_name}..."
150+
psql $PGCONNECTION -c "CREATE DATABASE ${each.value.database_name};"
151+
echo "Database ${each.value.database_name} created successfully."
152+
fi
153+
EOT
136154
]
137155

138156
env {
139157
name = "DATABASE_URL"
140158
value = replace(each.value.metadata_backend_url, "/${basename(each.value.metadata_backend_url)}", "/postgres")
141159
}
160+
resources {
161+
limits = {
162+
cpu = "200m"
163+
memory = "128Mi"
164+
}
165+
requests = {
166+
cpu = "100m"
167+
memory = "64Mi"
168+
}
169+
}
142170
}
143171

144172
restart_policy = "OnFailure"

0 commit comments

Comments
 (0)