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  }