github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/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 "os" 9 ) 10 11 // Provider returns a schema.Provider for alicloud 12 func Provider() terraform.ResourceProvider { 13 return &schema.Provider{ 14 Schema: map[string]*schema.Schema{ 15 "access_key": &schema.Schema{ 16 Type: schema.TypeString, 17 Required: true, 18 DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_ACCESS_KEY", nil), 19 Description: descriptions["access_key"], 20 }, 21 "secret_key": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_SECRET_KEY", nil), 25 Description: descriptions["secret_key"], 26 }, 27 "region": &schema.Schema{ 28 Type: schema.TypeString, 29 Required: true, 30 DefaultFunc: schema.EnvDefaultFunc("ALICLOUD_REGION", DEFAULT_REGION), 31 Description: descriptions["region"], 32 }, 33 }, 34 DataSourcesMap: map[string]*schema.Resource{ 35 36 "alicloud_images": dataSourceAlicloudImages(), 37 "alicloud_regions": dataSourceAlicloudRegions(), 38 "alicloud_zones": dataSourceAlicloudZones(), 39 "alicloud_instance_types": dataSourceAlicloudInstanceTypes(), 40 }, 41 ResourcesMap: map[string]*schema.Resource{ 42 "alicloud_instance": resourceAliyunInstance(), 43 "alicloud_disk": resourceAliyunDisk(), 44 "alicloud_disk_attachment": resourceAliyunDiskAttachment(), 45 "alicloud_security_group": resourceAliyunSecurityGroup(), 46 "alicloud_security_group_rule": resourceAliyunSecurityGroupRule(), 47 "alicloud_db_instance": resourceAlicloudDBInstance(), 48 "alicloud_ess_scaling_group": resourceAlicloudEssScalingGroup(), 49 "alicloud_ess_scaling_configuration": resourceAlicloudEssScalingConfiguration(), 50 "alicloud_ess_scaling_rule": resourceAlicloudEssScalingRule(), 51 "alicloud_ess_schedule": resourceAlicloudEssSchedule(), 52 "alicloud_vpc": resourceAliyunVpc(), 53 "alicloud_nat_gateway": resourceAliyunNatGateway(), 54 //both subnet and vswith exists,cause compatible old version, and compatible aws habit. 55 "alicloud_subnet": resourceAliyunSubnet(), 56 "alicloud_vswitch": resourceAliyunSubnet(), 57 "alicloud_route_entry": resourceAliyunRouteEntry(), 58 "alicloud_snat_entry": resourceAliyunSnatEntry(), 59 "alicloud_forward_entry": resourceAliyunForwardEntry(), 60 "alicloud_eip": resourceAliyunEip(), 61 "alicloud_eip_association": resourceAliyunEipAssociation(), 62 "alicloud_slb": resourceAliyunSlb(), 63 "alicloud_slb_attachment": resourceAliyunSlbAttachment(), 64 }, 65 66 ConfigureFunc: providerConfigure, 67 } 68 } 69 70 func providerConfigure(d *schema.ResourceData) (interface{}, error) { 71 accesskey, ok := d.GetOk("access_key") 72 if !ok { 73 accesskey = os.Getenv("ALICLOUD_ACCESS_KEY") 74 } 75 secretkey, ok := d.GetOk("secret_key") 76 if !ok { 77 secretkey = os.Getenv("ALICLOUD_SECRET_KEY") 78 } 79 region, ok := d.GetOk("region") 80 if !ok { 81 region = os.Getenv("ALICLOUD_REGION") 82 if region == "" { 83 region = DEFAULT_REGION 84 } 85 } 86 87 config := Config{ 88 AccessKey: accesskey.(string), 89 SecretKey: secretkey.(string), 90 Region: common.Region(region.(string)), 91 } 92 93 client, err := config.Client() 94 if err != nil { 95 return nil, err 96 } 97 98 return client, nil 99 } 100 101 // This is a global MutexKV for use within this plugin. 102 var alicloudMutexKV = mutexkv.NewMutexKV() 103 104 var descriptions map[string]string 105 106 func init() { 107 descriptions = map[string]string{ 108 "access_key": "Access key of alicloud", 109 "secret_key": "Secret key of alicloud", 110 "region": "Region of alicloud", 111 } 112 }