github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/consul/config.go (about)

     1  package consul
     2  
     3  import (
     4  	"log"
     5  	"net/http"
     6  	"strings"
     7  
     8  	consulapi "github.com/hashicorp/consul/api"
     9  )
    10  
    11  type Config struct {
    12  	Datacenter string `mapstructure:"datacenter"`
    13  	Address    string `mapstructure:"address"`
    14  	Scheme     string `mapstructure:"scheme"`
    15  	HttpAuth   string `mapstructure:"http_auth"`
    16  	Token      string `mapstructure:"token"`
    17  	CAFile     string `mapstructure:"ca_file"`
    18  	CertFile   string `mapstructure:"cert_file"`
    19  	KeyFile    string `mapstructure:"key_file"`
    20  }
    21  
    22  // Client() returns a new client for accessing consul.
    23  //
    24  func (c *Config) Client() (*consulapi.Client, error) {
    25  	config := consulapi.DefaultConfig()
    26  	if c.Datacenter != "" {
    27  		config.Datacenter = c.Datacenter
    28  	}
    29  	if c.Address != "" {
    30  		config.Address = c.Address
    31  	}
    32  	if c.Scheme != "" {
    33  		config.Scheme = c.Scheme
    34  	}
    35  
    36  	tlsConfig := &consulapi.TLSConfig{}
    37  	tlsConfig.CAFile = c.CAFile
    38  	tlsConfig.CertFile = c.CertFile
    39  	tlsConfig.KeyFile = c.KeyFile
    40  	cc, err := consulapi.SetupTLSConfig(tlsConfig)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	config.HttpClient.Transport.(*http.Transport).TLSClientConfig = cc
    45  
    46  	if c.HttpAuth != "" {
    47  		var username, password string
    48  		if strings.Contains(c.HttpAuth, ":") {
    49  			split := strings.SplitN(c.HttpAuth, ":", 2)
    50  			username = split[0]
    51  			password = split[1]
    52  		} else {
    53  			username = c.HttpAuth
    54  		}
    55  		config.HttpAuth = &consulapi.HttpBasicAuth{Username: username, Password: password}
    56  	}
    57  
    58  	if c.Token != "" {
    59  		config.Token = c.Token
    60  	}
    61  
    62  	client, err := consulapi.NewClient(config)
    63  
    64  	log.Printf("[INFO] Consul Client configured with address: '%s', scheme: '%s', datacenter: '%s'",
    65  		config.Address, config.Scheme, config.Datacenter)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  	return client, nil
    70  }