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 }