Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ resource "kubernetes_manifest" "materialize_instances" {
environmentdImageRef = "materialize/environmentd:${each.value.environmentd_version}"
backendSecretName = "${each.key}-materialize-backend"
inPlaceRollout = each.value.in_place_rollout
requestRollout = each.value.request_rollout
forceRollout = each.value.force_rollout
requestRollout = lookup(each.value, "request_rollout", null)
forceRollout = lookup(each.value, "force_rollout", null)
environmentdResourceRequirements = {
limits = {
memory = each.value.memory_limit
Expand Down Expand Up @@ -109,19 +109,20 @@ resource "kubernetes_manifest" "materialize_instances" {

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

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

spec {
backoff_limit = 3
ttl_seconds_after_finished = 3600
backoff_limit = 5
template {
metadata {
labels = {
app = "init-db-${each.key}"
app = "init-db-${each.value.name}"
}
}
spec {
Expand All @@ -132,13 +133,40 @@ resource "kubernetes_job" "db_init_job" {
command = [
"/bin/sh",
"-c",
"psql $DATABASE_URL -c \"CREATE DATABASE ${each.key};\""
<<-EOT
# Extract connection details and connect to postgres database
export PGCONNECTION=$(echo $DATABASE_URL | sed 's|/[^/]*$|/postgres|')

echo "Waiting for PostgreSQL to be ready..."
until pg_isready -d $PGCONNECTION; do
sleep 2
done

# Check if database exists
if psql $PGCONNECTION -t -c "SELECT 1 FROM pg_database WHERE datname='${each.value.database_name}';" | grep -q 1; then
echo "Database ${each.value.database_name} already exists."
else
echo "Creating database ${each.value.database_name}..."
psql $PGCONNECTION -c "CREATE DATABASE ${each.value.database_name};"
echo "Database ${each.value.database_name} created successfully."
fi
EOT
]

env {
name = "DATABASE_URL"
value = replace(each.value.metadata_backend_url, "/${basename(each.value.metadata_backend_url)}", "/postgres")
}
resources {
limits = {
cpu = "200m"
memory = "128Mi"
}
requests = {
cpu = "100m"
memory = "64Mi"
}
}
}

restart_policy = "OnFailure"
Expand Down