Newer
Older
func init() {
caddy.RegisterModule((*Discoverer)(nil))
}
func (T *Discoverer) CaddyModule() caddy.ModuleInfo {
return caddy.ModuleInfo{
ID: "pggat.handlers.discovery.discoverers.digitalocean",
New: func() caddy.Module {
return new(Discoverer)
},
}
}
func (T *Discoverer) Provision(ctx caddy.Context) error {
T.do = godo.NewFromToken(T.APIKey)
return nil
func (T *Discoverer) Clusters() ([]discovery.Cluster, error) {
clusters, _, err := T.do.Databases.List(context.Background(), nil)
if err != nil {
return nil, err
}
res := make([]discovery.Cluster, 0, len(clusters))
for _, cluster := range clusters {
if cluster.EngineSlug != "pg" {
continue
}
var primaryAddr string
primaryAddr = net.JoinHostPort(cluster.PrivateConnection.Host, strconv.Itoa(cluster.PrivateConnection.Port))
} else {
primaryAddr = net.JoinHostPort(cluster.Connection.Host, strconv.Itoa(cluster.Connection.Port))
}
c := discovery.Cluster{
Databases: cluster.DBNames,
Users: make([]discovery.User, 0, len(cluster.Users)),
}
Password: user.Password,
})
}
replicas, _, err := T.do.Databases.ListReplicas(context.Background(), cluster.ID, nil)
if err != nil {
return nil, err
}
replicaAddr = net.JoinHostPort(replica.PrivateConnection.Host, strconv.Itoa(replica.PrivateConnection.Port))
} else {
replicaAddr = net.JoinHostPort(replica.Connection.Host, strconv.Itoa(replica.Connection.Port))
}
return nil
}
var _ discovery.Discoverer = (*Discoverer)(nil)