2017-08-01 11:41:43 +02:00
..
2017-08-01 11:41:43 +02:00
2017-08-01 11:41:43 +02:00
2017-08-01 11:41:43 +02:00
2017-08-01 11:41:43 +02:00
2017-08-01 11:41:43 +02:00

Go Discover Nodes for Cloud Providers Build Status GoDoc

go-discover is a Go (golang) library and command line tool to discover ip addresses of nodes in cloud environments based on meta information like tags provided by the environment.

The configuration for the providers is provided as a list of key=val key=val ... tuples where the values can be URL encoded. The provider is determined through the provider key. Effectively, only spaces have to be encoded with a + and on the command line you have to observe quoting rules with your shell.

Supported Providers

The following cloud providers have implementations in the go-discover/provider sub packages. Additional providers can be added through the Register function.

Config Example

# Amazon AWS
provider=aws region=eu-west-1 tag_key=consul tag_value=... access_key_id=... secret_access_key=...

# Google Cloud
provider=gce project_name=... zone_pattern=eu-west-* tag_value=consul credentials_file=...

# Microsoft Azure
provider=azure tag_name=consul tag_value=... tenant_id=... client_id=... subscription_id=... secret_access_key=...

# SoftLayer
provider=softlayer datacenter=dal06 tag_value=consul username=... api_key=...

Command Line Tool Usage

Install the command line tool with:

go get -u github.com/hashicorp/go-discover/cmd/discover

Then run it with:

$ discover addrs provider=aws region=eu-west-1 ...

Library Usage

Install the library with:

go get -u github.com/hashicorp/go-discover

Supported providers need to be registered by importing them similar to database drivers for the database/sql package.

Import the go-discover package and any provider package you want to support.

// support only AWS and GCE
import (
	discover "github.com/hashicorp/go-discover"

	_ "github.com/hashicorp/go-discover/provider/aws"
	_ "github.com/hashicorp/go-discover/provider/gce"
)

To import all known providers at once you can use the convenience package all.

// support all providers supported by go-discover
import (
	discover "github.com/hashicorp/go-discover"

	_ "github.com/hashicorp/go-discover/provider/all"
)

Then call the discover.Addrs function with the arguments for the provider you want to use:

# use ioutil.Discard for no log output
l := log.New(os.Stderr, "", log.LstdFlags)
cfg := "provider=aws region=eu-west-1 ..."
addrs, err := discover.Addrs(cfg, l)

For complete API documentation, see GoDoc. The configuration for the supported providers is documented in the providers sub-package.