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  }