mirror of
https://gitlab.com/pnx-tools/dns-updater.git
synced 2026-06-16 05:54:56 +02:00
49 lines
927 B
Go
49 lines
927 B
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"dnsupdater/dns/service/digitalocean"
|
|
"dnsupdater/dns/service/vultr"
|
|
)
|
|
|
|
var factories = map[string]Factory{
|
|
"digitalocean": digitalocean.Factory,
|
|
"vultr": vultr.Factory,
|
|
}
|
|
|
|
type Manager struct {
|
|
services map[string]Service
|
|
}
|
|
|
|
func NewManager() *Manager {
|
|
return &Manager{
|
|
services: make(map[string]Service),
|
|
}
|
|
}
|
|
|
|
func (m Manager) Get(name string) Service {
|
|
if service, ok := m.services[name]; ok {
|
|
return service
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m Manager) RegisterFromConfig(providers map[string]map[string]any) error {
|
|
for name, args := range providers {
|
|
if factory, ok := factories[name]; ok {
|
|
|
|
provider, err := factory(args)
|
|
if err != nil {
|
|
return fmt.Errorf("could not create provider '%s': %v", name, err)
|
|
}
|
|
|
|
m.Register(name, provider.(Service))
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m Manager) Register(name string, provider Service) {
|
|
m.services[name] = provider
|
|
}
|