58 lines
1.4 KiB
Go
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)
|
|
}
|