Files
unkin-agent 2b37986218 waitfordb: initial tool — env-configured wait-for-DB init container
Small Go tool + distroless container used as a K8s initContainer to block an
app until its database (Postgres/MySQL) is reachable. Env-var configured
(WAITFORDB_* + libpq PG* fallback), configurable timeout/interval, redacted
logs, exit codes. Woodpecker CI publishes docker-internal/waitfordb on tag.
2026-08-22 13:31:44 +10:00

36 lines
761 B
Go

package driver
import (
"fmt"
"git.unkin.net/unkin/waitfordb/internal/config"
"github.com/go-sql-driver/mysql"
)
func init() { register(mysqlDriver{}) }
type mysqlDriver struct{}
func (mysqlDriver) Name() string { return "mysql" }
func (mysqlDriver) Open(cfg config.Config) (Pinger, error) {
dsn := cfg.DSN
if dsn == "" {
dsn = mysqlDSN(cfg)
}
return openSQL("mysql", dsn)
}
// mysqlDSN builds a driver-native DSN via mysql.Config so credentials and the
// address are escaped correctly.
func mysqlDSN(cfg config.Config) string {
c := mysql.NewConfig()
c.User = cfg.User
c.Passwd = cfg.Password
c.Net = "tcp"
c.Addr = fmt.Sprintf("%s:%s", cfg.Host, cfg.Port)
c.DBName = cfg.Database
c.Timeout = cfg.ConnectTimeout
return c.FormatDSN()
}