Files
im_server/scripts/apply_hotgo_tenant_db.go
T

58 lines
1.4 KiB
Go

//go:build ignore
package main
import (
"database/sql"
"fmt"
"os"
"strings"
mysqlDriver "github.com/go-sql-driver/mysql"
)
const sharedBusinessDatabase = "meeting_im"
// This startup helper intentionally performs validation only. Database schema
// changes are managed by the checked-in SQL migrations and must not be applied
// implicitly while an IM Server pod is starting.
func main() {
rawDSN := strings.TrimSpace(os.Getenv("IM_MYSQL_DSN"))
dsn := strings.TrimPrefix(rawDSN, "mysql://")
if dsn == "" {
fatal("IM_MYSQL_DSN is required")
}
config, err := mysqlDriver.ParseDSN(dsn)
if err != nil {
fatal(fmt.Errorf("parse IM_MYSQL_DSN: %w", err))
}
if !strings.EqualFold(strings.TrimSpace(config.DBName), sharedBusinessDatabase) {
fatal(fmt.Errorf("IM_MYSQL_DSN must select %s; got %q", sharedBusinessDatabase, config.DBName))
}
db, err := sql.Open("mysql", config.FormatDSN())
if err != nil {
fatal(err)
}
defer db.Close()
if err = db.Ping(); err != nil {
fatal(err)
}
var database string
if err = db.QueryRow("SELECT DATABASE()").Scan(&database); err != nil {
fatal(err)
}
if !strings.EqualFold(database, sharedBusinessDatabase) {
fatal(fmt.Errorf("connected database is %q, want %q", database, sharedBusinessDatabase))
}
fmt.Printf("IM shared database validated: %s\n", database)
}
func fatal(v any) {
fmt.Fprintln(os.Stderr, v)
os.Exit(1)
}