github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/alicloud/provider.go (about)

     1  package alicloud
     2  
     3  import (
     4  	"github.com/denverdino/aliyungo/common"
     5  	"github.com/hashicorp/terraform/helper/mutexkv"
     6  	"github.com/hashicorp/terraform/helper/schema"
     7  	"github.com/hashicorp/terraform/terraform"
     8  )
     9  
    10  // Provider returns a schema.Provider for alicloud
    11  func Provider() terraform.ResourceProvider {
    12  	return &schema.Provider{
    13  		Schema: map[string]*schema.Schema{
    14  			"access_key": &schema.Schema{
    15  				Type:        schema.TypeString,
    16  				Required:    true,
    17  				DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_ACCESS_KEY", nil),
    18  				Description: descriptions["access_key"],
    19  			},
    20  			"secret_key": &schema.Schema{
    21  				Type:        schema.TypeString,
    22  				Required:    true,
    23  				DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_SECRET_KEY", nil),
    24  				Description: descriptions["secret_key"],
    25  			},
    26  			"region": &schema.Schema{
    27  				Type:        schema.TypeString,
    28  				Required:    true,
    29  				DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_REGION", "cn-beijing"),
    30  				Description: descriptions["region"],
    31  			},
    32  		},
    33  		DataSourcesMap: map[string]*schema.Resource{
    34  
    35  			"alicloud_images":         dataSourceAlicloudImages(),
    36  			"alicloud_regions":        dataSourceAlicloudRegions(),
    37  			"alicloud_zones":          dataSourceAlicloudZones(),
    38  			"alicloud_instance_types": dataSourceAlicloudInstanceTypes(),
    39  		},
    40  		ResourcesMap: map[string]*schema.Resource{
    41  			"alicloud_instance":            resourceAliyunInstance(),
    42  			"alicloud_disk":                resourceAliyunDisk(),
    43  			"alicloud_disk_attachment":     resourceAliyunDiskAttachment(),
    44  			"alicloud_security_group":      resourceAliyunSecurityGroup(),
    45  			"alicloud_security_group_rule": resourceAliyunSecurityGroupRule(),
    46  			"alicloud_vpc":                 resourceAliyunVpc(),
    47  			"alicloud_nat_gateway":         resourceAliyunNatGateway(),
    48  			//both subnet and vswith exists,cause compatible old version, and compatible aws habit.
    49  			"alicloud_subnet":          resourceAliyunSubnet(),
    50  			"alicloud_vswitch":         resourceAliyunSubnet(),
    51  			"alicloud_route_entry":     resourceAliyunRouteEntry(),
    52  			"alicloud_eip":             resourceAliyunEip(),
    53  			"alicloud_eip_association": resourceAliyunEipAssociation(),
    54  			"alicloud_slb":             resourceAliyunSlb(),
    55  			"alicloud_slb_attachment":  resourceAliyunSlbAttachment(),
    56  		},
    57  
    58  		ConfigureFunc: providerConfigure,
    59  	}
    60  }
    61  
    62  func providerConfigure(d *schema.ResourceData) (interface{}, error) {
    63  	config := Config{
    64  		AccessKey: d.Get("access_key").(string),
    65  		SecretKey: d.Get("secret_key").(string),
    66  		Region:    common.Region(d.Get("region").(string)),
    67  	}
    68  
    69  	client, err := config.Client()
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	return client, nil
    75  }
    76  
    77  // This is a global MutexKV for use within this plugin.
    78  var alicloudMutexKV = mutexkv.NewMutexKV()
    79  
    80  var descriptions map[string]string
    81  
    82  func init() {
    83  	descriptions = map[string]string{
    84  		"access_key": "Access key of alicloud",
    85  		"secret_key": "Secret key of alicloud",
    86  		"region":     "Region of alicloud",
    87  	}
    88  }