@@ -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
111111resource "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