package openstack import ( "github.com/hashicorp/terraform/helper/mutexkv" "github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/terraform" ) // This is a global MutexKV for use within this plugin. var osMutexKV = mutexkv.NewMutexKV() // Provider returns a schema.Provider for OpenStack. func Provider() terraform.ResourceProvider { return &schema.Provider{ Schema: map[string]*schema.Schema{ "auth_url": &schema.Schema{ Type: schema.TypeString, Required: true, DefaultFunc: schema.EnvDefaultFunc("OS_AUTH_URL", nil), Description: descriptions["auth_url"], }, "user_name": &schema.Schema{ Type: schema.TypeString, Optional: true, DefaultFunc: schema.EnvDefaultFunc("OS_USERNAME", ""), Description: descriptions["user_name"], }, "user_id": &schema.Schema{ Type: schema.TypeString,
"scaleway_security_group": resourceScalewaySecurityGroup(), "scaleway_security_group_rule": resourceScalewaySecurityGroupRule(), "scaleway_volume": resourceScalewayVolume(), "scaleway_volume_attachment": resourceScalewayVolumeAttachment(), }, DataSourcesMap: map[string]*schema.Resource{ "scaleway_bootscript": dataSourceScalewayBootscript(), "scaleway_image": dataSourceScalewayImage(), }, ConfigureFunc: providerConfigure, } } var scalewayMutexKV = mutexkv.NewMutexKV() func providerConfigure(d *schema.ResourceData) (interface{}, error) { apiKey := "" if v, ok := d.Get("token").(string); ok { apiKey = v } else { if v, ok := d.Get("access_key").(string); ok { apiKey = v } } config := Config{ Organization: d.Get("organization").(string), APIKey: apiKey, Region: d.Get("region").(string),
"kinesis_endpoint": "Use this to override the default endpoint URL constructed from the `region`.\n" + "It's typically used to connect to kinesalite.", } } func providerConfigure(d *schema.ResourceData) (interface{}, error) { config := Config{ AccessKey: d.Get("access_key").(string), SecretKey: d.Get("secret_key").(string), Token: d.Get("token").(string), Region: d.Get("region").(string), MaxRetries: d.Get("max_retries").(int), DynamoDBEndpoint: d.Get("dynamodb_endpoint").(string), KinesisEndpoint: d.Get("kinesis_endpoint").(string), } if v, ok := d.GetOk("allowed_account_ids"); ok { config.AllowedAccountIds = v.(*schema.Set).List() } if v, ok := d.GetOk("forbidden_account_ids"); ok { config.ForbiddenAccountIds = v.(*schema.Set).List() } return config.Client() } // This is a global MutexKV for use within this plugin. var awsMutexKV = mutexkv.NewMutexKV()
// the same name in a short (though undetermined) time period. // // It is possible that this will give Terraform the appearance of being slow in // future: I have attempted to mitigate this by logging whenever this happens. We // may want to revisit this with configurable timeouts in the future as clearly // unbounded wait loops is not ideal. It does seem preferable to the current situation // where our polling loop will time out _with an operation in progress_, but no ID // for the resource - so the state will not know about it, and conflicts will occur // on the next run. func pollIndefinitelyAsNeeded(client autorest.Client, response *http.Response, acceptableCodes ...int) (*http.Response, error) { var resp *http.Response var err error for { resp, err = client.PollAsNeeded(response, acceptableCodes...) if err != nil { if resp.StatusCode != http.StatusAccepted { log.Printf("[DEBUG] Starting new polling loop for %q", response.Request.URL.Path) continue } return resp, err } return resp, nil } } // armMutexKV is the instance of MutexKV for ARM resources var armMutexKV = mutexkv.NewMutexKV()