fix(beads-server): auto-connect Workbench to Dolt on startup
The Workbench's database connection is in-memory and lost on pod restart. Added startup script that waits for GraphQL server readiness, then calls addDatabaseConnection mutation automatically. No more manual reconnection. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5e9e487661
commit
eef4242408
1 changed files with 26 additions and 16 deletions
|
|
@ -185,11 +185,11 @@ resource "kubernetes_config_map" "workbench_store" {
|
||||||
}
|
}
|
||||||
data = {
|
data = {
|
||||||
"store.json" = jsonencode([{
|
"store.json" = jsonencode([{
|
||||||
name = "beads"
|
name = "beads"
|
||||||
connectionUrl = "mysql://beads@dolt.beads-server.svc.cluster.local:3306/code"
|
connectionUrl = "mysql://beads@dolt.beads-server.svc.cluster.local:3306/code"
|
||||||
hideDoltFeatures = false
|
hideDoltFeatures = false
|
||||||
useSSL = false
|
useSSL = false
|
||||||
type = "Mysql"
|
type = "Mysql"
|
||||||
}])
|
}])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -252,8 +252,18 @@ resource "kubernetes_deployment" "workbench" {
|
||||||
command = ["sh", "-c", <<-EOT
|
command = ["sh", "-c", <<-EOT
|
||||||
# Patch GraphQL server to listen on 0.0.0.0 (IPv4) — Node 18+ defaults to IPv6
|
# Patch GraphQL server to listen on 0.0.0.0 (IPv4) — Node 18+ defaults to IPv6
|
||||||
sed -i 's|app.listen(9002)|app.listen(9002,"0.0.0.0")|g' /app/graphql-server/dist/main.js
|
sed -i 's|app.listen(9002)|app.listen(9002,"0.0.0.0")|g' /app/graphql-server/dist/main.js
|
||||||
# Start PM2 (the default entrypoint)
|
# Start PM2, then auto-connect to Dolt after GraphQL is ready
|
||||||
exec pm2-runtime /app/process.yml
|
pm2-runtime /app/process.yml &
|
||||||
|
PM2_PID=$!
|
||||||
|
# Wait for GraphQL server to be ready, then auto-connect
|
||||||
|
for i in $(seq 1 30); do
|
||||||
|
if node -e "fetch('http://127.0.0.1:9002/graphql',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({query:'{storedConnections{name}}'})}).then(r=>{if(r.ok)process.exit(0);process.exit(1)}).catch(()=>process.exit(1))" 2>/dev/null; then
|
||||||
|
node -e "fetch('http://127.0.0.1:9002/graphql',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({query:'mutation{addDatabaseConnection(connectionUrl:\"mysql://beads@dolt.beads-server.svc.cluster.local:3306/code\",name:\"beads\",hideDoltFeatures:false,useSSL:false,type:Mysql){currentDatabase}}'})}).then(r=>r.text()).then(t=>{console.log('Auto-connect:',t);process.exit(0)}).catch(e=>{console.error(e);process.exit(1)})" 2>&1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done &
|
||||||
|
wait $PM2_PID
|
||||||
EOT
|
EOT
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -434,14 +444,14 @@ resource "kubernetes_config_map" "beadboard_config" {
|
||||||
}
|
}
|
||||||
data = {
|
data = {
|
||||||
"metadata.json" = jsonencode({
|
"metadata.json" = jsonencode({
|
||||||
database = "dolt"
|
database = "dolt"
|
||||||
backend = "dolt"
|
backend = "dolt"
|
||||||
dolt_mode = "server"
|
dolt_mode = "server"
|
||||||
dolt_server_host = "dolt.beads-server.svc.cluster.local"
|
dolt_server_host = "dolt.beads-server.svc.cluster.local"
|
||||||
dolt_server_port = 3306
|
dolt_server_port = 3306
|
||||||
dolt_server_user = "root"
|
dolt_server_user = "root"
|
||||||
dolt_database = "code"
|
dolt_database = "code"
|
||||||
project_id = "a8f8bae7-ce65-4145-a5db-a13d11d297da"
|
project_id = "a8f8bae7-ce65-4145-a5db-a13d11d297da"
|
||||||
})
|
})
|
||||||
"dolt-server.port" = "3306"
|
"dolt-server.port" = "3306"
|
||||||
}
|
}
|
||||||
|
|
@ -475,8 +485,8 @@ resource "kubernetes_deployment" "beadboard" {
|
||||||
}
|
}
|
||||||
|
|
||||||
init_container {
|
init_container {
|
||||||
name = "seed-beads-config"
|
name = "seed-beads-config"
|
||||||
image = "busybox:1.36"
|
image = "busybox:1.36"
|
||||||
command = ["sh", "-c", "cp /config/* /beads/ && mkdir -p /beads/templates /beads/archetypes"]
|
command = ["sh", "-c", "cp /config/* /beads/ && mkdir -p /beads/templates /beads/archetypes"]
|
||||||
volume_mount {
|
volume_mount {
|
||||||
name = "beads-config"
|
name = "beads-config"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue