github.com/timsutton/packer@v1.3.2/builder/alicloud/ecs/access_config.go (about) 1 package ecs 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/denverdino/aliyungo/common" 8 "github.com/denverdino/aliyungo/ecs" 9 "github.com/hashicorp/packer/template/interpolate" 10 ) 11 12 // Config of alicloud 13 type AlicloudAccessConfig struct { 14 AlicloudAccessKey string `mapstructure:"access_key"` 15 AlicloudSecretKey string `mapstructure:"secret_key"` 16 AlicloudRegion string `mapstructure:"region"` 17 AlicloudSkipValidation bool `mapstructure:"skip_region_validation"` 18 SecurityToken string `mapstructure:"security_token"` 19 } 20 21 // Client for AlicloudClient 22 func (c *AlicloudAccessConfig) Client() (*ecs.Client, error) { 23 if err := c.loadAndValidate(); err != nil { 24 return nil, err 25 } 26 if c.SecurityToken == "" { 27 c.SecurityToken = os.Getenv("SECURITY_TOKEN") 28 } 29 client := ecs.NewECSClientWithSecurityToken(c.AlicloudAccessKey, c.AlicloudSecretKey, 30 c.SecurityToken, common.Region(c.AlicloudRegion)) 31 32 client.SetBusinessInfo("Packer") 33 if _, err := client.DescribeRegions(); err != nil { 34 return nil, err 35 } 36 return client, nil 37 } 38 39 func (c *AlicloudAccessConfig) Prepare(ctx *interpolate.Context) []error { 40 var errs []error 41 if err := c.Config(); err != nil { 42 errs = append(errs, err) 43 } 44 45 if c.AlicloudRegion != "" && !c.AlicloudSkipValidation { 46 if c.validateRegion() != nil { 47 errs = append(errs, fmt.Errorf("Unknown alicloud region: %s", c.AlicloudRegion)) 48 } 49 } 50 51 if len(errs) > 0 { 52 return errs 53 } 54 55 return nil 56 } 57 58 func (c *AlicloudAccessConfig) Config() error { 59 if c.AlicloudAccessKey == "" { 60 c.AlicloudAccessKey = os.Getenv("ALICLOUD_ACCESS_KEY") 61 } 62 if c.AlicloudSecretKey == "" { 63 c.AlicloudSecretKey = os.Getenv("ALICLOUD_SECRET_KEY") 64 } 65 if c.AlicloudAccessKey == "" || c.AlicloudSecretKey == "" { 66 return fmt.Errorf("ALICLOUD_ACCESS_KEY and ALICLOUD_SECRET_KEY must be set in template file or environment variables.") 67 } 68 return nil 69 70 } 71 72 func (c *AlicloudAccessConfig) loadAndValidate() error { 73 if err := c.validateRegion(); err != nil { 74 return err 75 } 76 77 return nil 78 } 79 80 func (c *AlicloudAccessConfig) validateRegion() error { 81 82 for _, valid := range common.ValidRegions { 83 if c.AlicloudRegion == string(valid) { 84 return nil 85 } 86 } 87 88 return fmt.Errorf("Not a valid alicloud region: %s", c.AlicloudRegion) 89 }