backend/factories/instancemanagers.go
2025-03-18 23:27:27 +02:00

57 lines
1.3 KiB
Go

package factories
import (
"errors"
"sync"
instancemanager "git.acooldomain.co/server-manager/backend/instancemanager"
"git.acooldomain.co/server-manager/backend/instancemanager/docker"
"git.acooldomain.co/server-manager/backend/models"
)
var (
instanceManagerHandlers = make(map[string]instancemanager.InstanceManager)
instanceManagerMutex sync.Mutex
)
func getDockerCacheKey(config *models.DockerInstanceManagerConfig) string {
return "Docker"
}
func GetInstanceManager(config models.InstanceManagerConfig) (instancemanager.InstanceManager, error) {
var key string
var handler instancemanager.InstanceManager
var err error
var exists bool
switch config.Type {
case models.DOCKER:
if config.Docker == nil {
return nil, errors.New("missing Docker configuration")
}
key = getDockerCacheKey(config.Docker)
default:
return nil, errors.New("unsupported database type")
}
instanceManagerMutex.Lock()
defer instanceManagerMutex.Unlock()
if handler, exists = instanceManagerHandlers[key]; exists {
return handler, nil
}
switch config.Type {
case models.DOCKER:
handler, err = docker.NewInstanceManager(*config.Docker)
if err != nil {
return nil, err
}
default:
return nil, errors.New("unsupported database type")
}
instanceManagerHandlers[key] = handler
return handler, nil
}