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 {
if T.Filter != nil {
val, err := ctx.LoadModule(T, "Filter")
if err != nil {
return fmt.Errorf("loading filter module: %v", err)
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
}
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
}
c.Replicas = make(map[string]discovery.Node, len(replicas))
replicaAddr = net.JoinHostPort(replica.PrivateConnection.Host, strconv.Itoa(replica.PrivateConnection.Port))
} else {
replicaAddr = net.JoinHostPort(replica.Connection.Host, strconv.Itoa(replica.Connection.Port))
}
}
res = append(res, c)
}
return res, nil
}
return nil
}
var _ discovery.Discoverer = (*Discoverer)(nil)