github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/alicloud/config.go (about) 1 package alicloud 2 3 import ( 4 "fmt" 5 6 "github.com/denverdino/aliyungo/common" 7 "github.com/denverdino/aliyungo/ecs" 8 "github.com/denverdino/aliyungo/slb" 9 ) 10 11 // Config of aliyun 12 type Config struct { 13 AccessKey string 14 SecretKey string 15 Region common.Region 16 } 17 18 // AliyunClient of aliyun 19 type AliyunClient struct { 20 Region common.Region 21 ecsconn *ecs.Client 22 vpcconn *ecs.Client 23 slbconn *slb.Client 24 } 25 26 // Client for AliyunClient 27 func (c *Config) Client() (*AliyunClient, error) { 28 err := c.loadAndValidate() 29 if err != nil { 30 return nil, err 31 } 32 33 ecsconn, err := c.ecsConn() 34 if err != nil { 35 return nil, err 36 } 37 38 slbconn, err := c.slbConn() 39 if err != nil { 40 return nil, err 41 } 42 43 vpcconn, err := c.vpcConn() 44 if err != nil { 45 return nil, err 46 } 47 48 return &AliyunClient{ 49 Region: c.Region, 50 ecsconn: ecsconn, 51 vpcconn: vpcconn, 52 slbconn: slbconn, 53 }, nil 54 } 55 56 func (c *Config) loadAndValidate() error { 57 err := c.validateRegion() 58 if err != nil { 59 return err 60 } 61 62 return nil 63 } 64 65 func (c *Config) validateRegion() error { 66 67 for _, valid := range common.ValidRegions { 68 if c.Region == valid { 69 return nil 70 } 71 } 72 73 return fmt.Errorf("Not a valid region: %s", c.Region) 74 } 75 76 func (c *Config) ecsConn() (*ecs.Client, error) { 77 client := ecs.NewClient(c.AccessKey, c.SecretKey) 78 _, err := client.DescribeRegions() 79 80 if err != nil { 81 return nil, err 82 } 83 84 return client, nil 85 } 86 87 func (c *Config) slbConn() (*slb.Client, error) { 88 client := slb.NewClient(c.AccessKey, c.SecretKey) 89 90 return client, nil 91 } 92 93 func (c *Config) vpcConn() (*ecs.Client, error) { 94 _, err := c.ecsConn() 95 96 if err != nil { 97 return nil, err 98 } 99 100 client := &ecs.Client{} 101 client.Init("https://vpc.aliyuncs.com/", "2016-04-28", c.AccessKey, c.SecretKey) 102 return client, nil 103 }