2013-07-16 00:08:19 -04:00
|
|
|
package common
|
|
|
|
|
|
|
|
import (
|
2013-07-29 19:42:35 -04:00
|
|
|
"fmt"
|
2013-07-16 00:08:19 -04:00
|
|
|
"github.com/mitchellh/goamz/aws"
|
2013-07-29 19:42:35 -04:00
|
|
|
"strings"
|
|
|
|
"unicode"
|
2013-07-16 00:08:19 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
// AccessConfig is for common configuration related to AWS access
|
|
|
|
type AccessConfig struct {
|
|
|
|
AccessKey string `mapstructure:"access_key"`
|
|
|
|
SecretKey string `mapstructure:"secret_key"`
|
2013-07-29 19:42:35 -04:00
|
|
|
RawRegion string `mapstructure:"region"`
|
2013-07-16 00:08:19 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
// Auth returns a valid aws.Auth object for access to AWS services, or
|
|
|
|
// an error if the authentication couldn't be resolved.
|
|
|
|
func (c *AccessConfig) Auth() (aws.Auth, error) {
|
|
|
|
return aws.GetAuth(c.AccessKey, c.SecretKey)
|
|
|
|
}
|
|
|
|
|
2013-07-29 19:42:35 -04:00
|
|
|
// Region returns the aws.Region object for access to AWS services, requesting
|
|
|
|
// the region from the instance metadata if possible.
|
|
|
|
func (c *AccessConfig) Region() (aws.Region, error) {
|
|
|
|
if c.RawRegion != "" {
|
|
|
|
return aws.Regions[c.RawRegion], nil
|
|
|
|
}
|
|
|
|
|
|
|
|
md, err := aws.GetMetaData("placement/availability-zone")
|
|
|
|
if err != nil {
|
|
|
|
return aws.Region{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
region := strings.TrimRightFunc(string(md), unicode.IsLetter)
|
|
|
|
return aws.Regions[region], nil
|
|
|
|
}
|
|
|
|
|
2013-07-16 00:23:40 -04:00
|
|
|
func (c *AccessConfig) Prepare() []error {
|
2013-07-29 19:42:35 -04:00
|
|
|
if c.RawRegion != "" {
|
|
|
|
if _, ok := aws.Regions[c.RawRegion]; !ok {
|
|
|
|
return []error{fmt.Errorf("Unknown region: %s", c.RawRegion)}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-07-16 00:08:19 -04:00
|
|
|
return nil
|
|
|
|
}
|