2b37986218
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.
36 lines
761 B
Go
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()
|
|
}
|