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  }