github.com/cbroglie/terraform@v0.7.0-rc3.0.20170410193827-735dfc416d46/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", DEFAULT_REGION), 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_db_instance": resourceAlicloudDBInstance(), 47 "alicloud_vpc": resourceAliyunVpc(), 48 "alicloud_nat_gateway": resourceAliyunNatGateway(), 49 //both subnet and vswith exists,cause compatible old version, and compatible aws habit. 50 "alicloud_subnet": resourceAliyunSubnet(), 51 "alicloud_vswitch": resourceAliyunSubnet(), 52 "alicloud_route_entry": resourceAliyunRouteEntry(), 53 "alicloud_eip": resourceAliyunEip(), 54 "alicloud_eip_association": resourceAliyunEipAssociation(), 55 "alicloud_slb": resourceAliyunSlb(), 56 "alicloud_slb_attachment": resourceAliyunSlbAttachment(), 57 }, 58 59 ConfigureFunc: providerConfigure, 60 } 61 } 62 63 func providerConfigure(d *schema.ResourceData) (interface{}, error) { 64 config := Config{ 65 AccessKey: d.Get("access_key").(string), 66 SecretKey: d.Get("secret_key").(string), 67 Region: common.Region(d.Get("region").(string)), 68 } 69 70 client, err := config.Client() 71 if err != nil { 72 return nil, err 73 } 74 75 return client, nil 76 } 77 78 // This is a global MutexKV for use within this plugin. 79 var alicloudMutexKV = mutexkv.NewMutexKV() 80 81 var descriptions map[string]string 82 83 func init() { 84 descriptions = map[string]string{ 85 "access_key": "Access key of alicloud", 86 "secret_key": "Secret key of alicloud", 87 "region": "Region of alicloud", 88 } 89 }