alibabacloudstack/resource_apsarastack_log_project.go (111 lines of code) (raw):

package alibabacloudstack import ( "time" sls "github.com/aliyun/aliyun-log-go-sdk" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) func resourceAlibabacloudStackLogProject() *schema.Resource { resource := &schema.Resource{ Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, Required: true, ForceNew: true, }, "description": { Type: schema.TypeString, Optional: true, }, }, } setResourceFunc(resource, resourceAlibabacloudStackLogProjectCreate, resourceAlibabacloudStackLogProjectRead, resourceAlibabacloudStackLogProjectUpdate, resourceAlibabacloudStackLogProjectDelete) return resource } func resourceAlibabacloudStackLogProjectCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) logService := LogService{client} name := d.Get("name").(string) request := client.NewCommonRequest("POST", "SLS", "2020-03-31", "CreateProject", "") request.QueryParams["projectName"] = name request.QueryParams["Description"] = d.Get("description").(string) bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } addDebug("LogProject", bresponse) err = resource.Retry(2*time.Minute, func() *resource.RetryError { object, err := logService.DescribeLogProject(name) if err != nil { return resource.NonRetryableError(err) } if object.ProjectName != "" { return nil } return resource.RetryableError(errmsgs.Error("Failed to describe log project")) }) d.SetId(name) return nil } func resourceAlibabacloudStackLogProjectRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) logService := LogService{client} object, err := logService.DescribeLogProject(d.Id()) if err != nil { if errmsgs.NotFoundError(err) { d.SetId("") return nil } return errmsgs.WrapError(err) } d.Set("name", object.ProjectName) d.Set("description", object.Description) return nil } func resourceAlibabacloudStackLogProjectUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) var requestInfo *sls.Client name := d.Id() if d.HasChange("description") { request := client.NewCommonRequest("POST", "SLS", "2020-03-31", "UpdateProject", "") request.QueryParams["ProjectName"] = name request.QueryParams["description"] = d.Get("description").(string) bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } addDebug("UpdateProject", bresponse, requestInfo, request) } return nil } func resourceAlibabacloudStackLogProjectDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) var requestInfo *sls.Client name := d.Get("name").(string) request := client.NewCommonRequest("POST", "SLS", "2020-03-31", "DeleteProject", "") request.QueryParams["ProjectName"] = name bresponse, err := client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"ProjectNotExist"}) { return nil } if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } addDebug("DeleteProject", bresponse, requestInfo, request) return nil }