Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions internal/api/multi_database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,51 @@ func TestDatabaseConfigRequest_Validate(t *testing.T) {
Type: "redis",
Mode: "existing",
ExistingContainer: "redis-server",
DatabaseName: "cache_db",
Username: "cache_user",
Password: "secret",
},
wantErr: false,
},
{
name: "existing mode missing database_name",
req: DatabaseConfigRequest{
Alias: "cache",
Type: "redis",
Mode: "existing",
ExistingContainer: "redis-server",
Username: "cache_user",
Password: "secret",
},
wantErr: true,
errMsg: "database_name is required",
},
{
name: "existing mode missing username",
req: DatabaseConfigRequest{
Alias: "cache",
Type: "redis",
Mode: "existing",
ExistingContainer: "redis-server",
DatabaseName: "cache_db",
Password: "secret",
},
wantErr: true,
errMsg: "username is required",
},
{
name: "existing mode missing password",
req: DatabaseConfigRequest{
Alias: "cache",
Type: "redis",
Mode: "existing",
ExistingContainer: "redis-server",
DatabaseName: "cache_db",
Username: "cache_user",
},
wantErr: true,
errMsg: "password is required",
},
{
name: "valid create mode config",
req: DatabaseConfigRequest{
Expand Down
34 changes: 29 additions & 5 deletions internal/api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,15 @@ func (d *DatabaseConfigRequest) Validate() error {
if d.ExistingContainer == "" {
return fmt.Errorf("existing_container is required for mode 'existing'")
}
if d.DatabaseName == "" {
return fmt.Errorf("database_name is required for mode 'existing'")
}
if d.Username == "" {
return fmt.Errorf("username is required for mode 'existing'")
}
if d.Password == "" {
return fmt.Errorf("password is required for mode 'existing'")
}
case "external":
if d.ExternalHost == "" {
return fmt.Errorf("external_host is required for mode 'external'")
Expand Down Expand Up @@ -1140,12 +1149,27 @@ func (s *Server) createDatabasesForDeployment(deploymentName string, databases [
case "existing":
config.Container = dbReq.ExistingContainer
config.Host = dbReq.ExistingContainer
if dbReq.DatabaseName != "" {
config.DatabaseName = dbReq.DatabaseName
}
if dbReq.Username != "" {
config.Username = dbReq.Username
config.DatabaseName = dbReq.DatabaseName
config.Username = dbReq.Username

existDbPort := dbReq.ExternalPort
if existDbPort == 0 {
switch dbReq.Type {
case "mysql", "mariadb":
existDbPort = 3306
case "postgres":
existDbPort = 5432
case "mongodb":
existDbPort = 27017
case "redis":
existDbPort = 6379
default:
return nil, nil, fmt.Errorf("unknown database type %q for %q: port must be specified explicitly", dbReq.Type, alias)
}
}
config.Port = existDbPort

envVars = s.generateDatabaseEnvVars(envPrefix, dbReq.ExistingContainer, existDbPort, dbReq.DatabaseName, dbReq.Username, dbReq.Password, dbReq.Type, isFirst)

case "external":
config.Host = dbReq.ExternalHost
Expand Down
Loading