alicloud/resource_alicloud_mns_queue.go (156 lines of code) (raw):

package alicloud import ( ali_mns "github.com/aliyun/aliyun-mns-go-sdk" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" ) func resourceAlicloudMNSQueue() *schema.Resource { return &schema.Resource{ Create: resourceAlicloudMNSQueueCreate, Read: resourceAlicloudMNSQueueRead, Update: resourceAlicloudMNSQueueUpdate, Delete: resourceAlicloudMNSQueueDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, }, Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, Required: true, ForceNew: true, ValidateFunc: validation.StringLenBetween(3, 256), }, "delay_seconds": { Type: schema.TypeInt, Optional: true, Default: 0, ValidateFunc: validation.IntBetween(0, 604800), }, "maximum_message_size": { Type: schema.TypeInt, Optional: true, Default: 65536, ValidateFunc: validation.IntBetween(1024, 65536), }, "message_retention_period": { Type: schema.TypeInt, Optional: true, Default: 345600, ValidateFunc: validation.IntBetween(60, 604800), }, "visibility_timeout": { Type: schema.TypeInt, Optional: true, Default: 30, ValidateFunc: validation.IntBetween(1, 43200), }, "polling_wait_seconds": { Type: schema.TypeInt, Optional: true, Default: 0, ValidateFunc: validation.IntBetween(0, 1800), }, }, } } func resourceAlicloudMNSQueueCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) name := d.Get("name").(string) var delaySeconds, maximumMessageSize, messageRetentionPeriod, visibilityTimeout, pollingWaitSeconds int if v, ok := d.GetOk("delay_seconds"); ok { delaySeconds = v.(int) } if v, ok := d.GetOk("maximum_message_size"); ok { maximumMessageSize = v.(int) } if v, ok := d.GetOk("message_retention_period"); ok { messageRetentionPeriod = v.(int) } if v, ok := d.GetOk("visibility_timeout"); ok { visibilityTimeout = v.(int) } if v, ok := d.GetOk("polling_wait_seconds"); ok { pollingWaitSeconds = v.(int) } raw, err := client.WithMnsQueueManager(func(queueManager ali_mns.AliQueueManager) (interface{}, error) { return nil, queueManager.CreateQueue(name, int32(delaySeconds), int32(maximumMessageSize), int32(messageRetentionPeriod), int32(visibilityTimeout), int32(pollingWaitSeconds), 3) }) if err != nil { return WrapErrorf(err, DefaultErrorMsg, "alicloud_mns_queue", "CreateQueue", AliMnsERROR) } addDebug("CreateQueue", raw) d.SetId(name) return resourceAlicloudMNSQueueRead(d, meta) } func resourceAlicloudMNSQueueRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) mnsService := MnsService{client} object, err := mnsService.DescribeMnsQueue(d.Id()) if err != nil { if NotFoundError(err) { d.SetId("") return nil } return WrapError(err) } d.Set("name", object.QueueName) d.Set("delay_seconds", object.DelaySeconds) d.Set("maximum_message_size", object.MaxMessageSize) d.Set("message_retention_period", object.MessageRetentionPeriod) d.Set("visibility_timeout", object.VisibilityTimeout) d.Set("polling_wait_seconds", object.PollingWaitSeconds) return nil } func resourceAlicloudMNSQueueUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) attributeUpdate := false var delaySeconds, maximumMessageSize, messageRetentionPeriod, visibilityTimeouts, pollingWaitSeconds int delaySeconds = d.Get("delay_seconds").(int) maximumMessageSize = d.Get("maximum_message_size").(int) messageRetentionPeriod = d.Get("message_retention_period").(int) visibilityTimeouts = d.Get("visibility_timeout").(int) pollingWaitSeconds = d.Get("polling_wait_seconds").(int) name := d.Id() if d.HasChange("delay_seconds") { attributeUpdate = true } if d.HasChange("maximum_message_size") { attributeUpdate = true } if d.HasChange("message_retention_period") { attributeUpdate = true } if d.HasChange("visibility_timeout") { attributeUpdate = true } if d.HasChange("polling_wait_seconds") { attributeUpdate = true } if attributeUpdate { raw, err := client.WithMnsQueueManager(func(queueManager ali_mns.AliQueueManager) (interface{}, error) { return nil, queueManager.SetQueueAttributes(name, int32(delaySeconds), int32(maximumMessageSize), int32(messageRetentionPeriod), int32(visibilityTimeouts), int32(pollingWaitSeconds), 3) }) if err != nil { return WrapErrorf(err, DefaultErrorMsg, d.Id(), "SetQueueAttributes", AliMnsERROR) } addDebug("SetQueueAttributes", raw) } return resourceAlicloudMNSQueueRead(d, meta) } func resourceAlicloudMNSQueueDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) mnsService := MnsService{client} name := d.Id() raw, err := client.WithMnsQueueManager(func(queueManager ali_mns.AliQueueManager) (interface{}, error) { return nil, queueManager.DeleteQueue(name) }) if err != nil { if mnsService.QueueNotExistFunc(err) { return nil } return WrapErrorf(err, DefaultErrorMsg, d.Id(), "DeleteQueue", AliMnsERROR) } addDebug("DeleteQueue", raw) return WrapError(mnsService.WaitForMnsQueue(d.Id(), Deleted, DefaultTimeout)) }