mirror of https://github.com/status-im/consul.git
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
package discover
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/hashicorp/go-discover/aws"
|
||
|
"github.com/hashicorp/go-discover/azure"
|
||
|
"github.com/hashicorp/go-discover/config"
|
||
|
"github.com/hashicorp/go-discover/gce"
|
||
|
)
|
||
|
|
||
|
// Discoverer is the signature of the function to discover ip addresses of nodes
|
||
|
// for a given configuration. cfg is in "key=val key=val ..." format suitable
|
||
|
// for config.Parse() to understand.
|
||
|
type Discoverer func(cfg string, l *log.Logger) ([]string, error)
|
||
|
|
||
|
// Discoverers is the list of available discoverers.
|
||
|
var Discoverers = map[string]Discoverer{}
|
||
|
|
||
|
func init() {
|
||
|
Discoverers = map[string]Discoverer{
|
||
|
"aws": aws.Discover,
|
||
|
"gce": gce.Discover,
|
||
|
"azure": azure.Discover,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Discover executes the node discovery for a given provider. The
|
||
|
// configuration is expected to be in "key=val key=val ..." format and
|
||
|
// the provider name must be the first parameter.
|
||
|
//
|
||
|
// Example:
|
||
|
//
|
||
|
// provider=aws region=eu-west-1 ...
|
||
|
//
|
||
|
func Discover(cfg string, l *log.Logger) ([]string, error) {
|
||
|
args := strings.SplitN(cfg, " ", 2)
|
||
|
m, err := config.Parse(args[0])
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
p := m["provider"]
|
||
|
if p == "" {
|
||
|
return nil, fmt.Errorf("discover: missing provider")
|
||
|
}
|
||
|
d := Discoverers[p]
|
||
|
if d == nil {
|
||
|
return nil, fmt.Errorf("discover: unknown provider %q", p)
|
||
|
}
|
||
|
return d(args[1], l)
|
||
|
}
|