postgres.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package db
  2. import (
  3. "fmt"
  4. "github.com/gravitl/netmaker/servercfg"
  5. "gorm.io/driver/postgres"
  6. "gorm.io/gorm"
  7. "gorm.io/gorm/logger"
  8. )
  9. // postgresConnector for initializing and
  10. // connecting to a postgres database.
  11. type postgresConnector struct{}
  12. // postgresConnector.connect connects and
  13. // initializes a connection to postgres.
  14. func (pg *postgresConnector) connect() (*gorm.DB, error) {
  15. pgConf := servercfg.GetSQLConf()
  16. dsn := fmt.Sprintf(
  17. "host=%s port=%d user=%s password=%s dbname=%s sslmode=%s connect_timeout=5",
  18. pgConf.Host,
  19. pgConf.Port,
  20. pgConf.Username,
  21. pgConf.Password,
  22. pgConf.DB,
  23. pgConf.SSLMode,
  24. )
  25. db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
  26. Logger: logger.Default.LogMode(logger.Silent),
  27. })
  28. if err != nil {
  29. return nil, err
  30. }
  31. // ensure netmaker_v1 schema exists.
  32. err = db.Exec("CREATE SCHEMA IF NOT EXISTS netmaker_v1").Error
  33. if err != nil {
  34. return nil, err
  35. }
  36. // set the netmaker_v1 schema as the default schema.
  37. err = db.Exec("SET search_path TO netmaker_v1").Error
  38. if err != nil {
  39. return nil, err
  40. }
  41. return db, nil
  42. }