alicloud/resource_alicloud_eflo_experiment_plan.go (233 lines of code) (raw):

// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you! package alicloud import ( "fmt" "log" "time" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) func resourceAliCloudEfloExperimentPlan() *schema.Resource { return &schema.Resource{ Create: resourceAliCloudEfloExperimentPlanCreate, Read: resourceAliCloudEfloExperimentPlanRead, Update: resourceAliCloudEfloExperimentPlanUpdate, Delete: resourceAliCloudEfloExperimentPlanDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, }, Timeouts: &schema.ResourceTimeout{ Create: schema.DefaultTimeout(5 * time.Minute), Update: schema.DefaultTimeout(5 * time.Minute), Delete: schema.DefaultTimeout(5 * time.Minute), }, Schema: map[string]*schema.Schema{ "create_time": { Type: schema.TypeString, Computed: true, }, "external_params": { Type: schema.TypeMap, Optional: true, }, "plan_name": { Type: schema.TypeString, Optional: true, Computed: true, }, "resource_group_id": { Type: schema.TypeString, Optional: true, Computed: true, }, "resource_id": { Type: schema.TypeInt, Required: true, ForceNew: true, }, "tags": tagsSchema(), "template_id": { Type: schema.TypeInt, Required: true, ForceNew: true, }, }, } } func resourceAliCloudEfloExperimentPlanCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) action := "CreateExperimentPlan" var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) var err error request = make(map[string]interface{}) request["RegionId"] = client.RegionId if v, ok := d.GetOk("external_params"); ok { request["ExternalParams"] = v } request["TemplateId"] = d.Get("template_id") if v, ok := d.GetOk("resource_group_id"); ok { request["ResourceGroupId"] = v } if v, ok := d.GetOk("tags"); ok { tagsMap := ConvertTags(v.(map[string]interface{})) request = expandTagsToMap(request, tagsMap) } request["ResourceId"] = d.Get("resource_id") if v, ok := d.GetOk("plan_name"); ok { request["PlanTemplateName"] = v } wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { return WrapErrorf(err, DefaultErrorMsg, "alicloud_eflo_experiment_plan", action, AlibabaCloudSdkGoERROR) } d.SetId(fmt.Sprint(response["Data"])) return resourceAliCloudEfloExperimentPlanRead(d, meta) } func resourceAliCloudEfloExperimentPlanRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) efloServiceV2 := EfloServiceV2{client} objectRaw, err := efloServiceV2.DescribeEfloExperimentPlan(d.Id()) if err != nil { if !d.IsNewResource() && NotFoundError(err) { log.Printf("[DEBUG] Resource alicloud_eflo_experiment_plan DescribeEfloExperimentPlan Failed!!! %s", err) d.SetId("") return nil } return WrapError(err) } d.Set("create_time", objectRaw["CreateTime"]) d.Set("plan_name", objectRaw["TemplateName"]) d.Set("resource_group_id", objectRaw["ResourceGroupId"]) d.Set("resource_id", objectRaw["ResourceId"]) d.Set("template_id", objectRaw["TemplateId"]) tagsMaps := objectRaw["Tags"] d.Set("tags", tagsToMap(tagsMaps)) return nil } func resourceAliCloudEfloExperimentPlanUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} update := false d.Partial(true) var err error action := "ChangeResourceGroup" request = make(map[string]interface{}) query = make(map[string]interface{}) request["ResourceId"] = d.Id() request["RegionId"] = client.RegionId if d.HasChange("resource_group_id") { update = true } if v, ok := d.GetOk("resource_group_id"); ok { request["ResourceGroupId"] = v } request["ResourceType"] = "ExperimentPlan" if update { wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } efloServiceV2 := EfloServiceV2{client} stateConf := BuildStateConf([]string{}, []string{fmt.Sprint(d.Get("resource_group_id"))}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, efloServiceV2.EfloExperimentPlanStateRefreshFunc(d.Id(), "ResourceGroupId", []string{})) if _, err := stateConf.WaitForState(); err != nil { return WrapErrorf(err, IdMsg, d.Id()) } } update = false action = "UpdateExperimentPlan" request = make(map[string]interface{}) query = make(map[string]interface{}) request["PlanId"] = d.Id() request["RegionId"] = client.RegionId if d.HasChange("plan_name") { update = true } if v, ok := d.GetOk("plan_name"); ok { request["PlanTemplateName"] = v } if update { wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } } if d.HasChange("tags") { efloServiceV2 := EfloServiceV2{client} if err := efloServiceV2.SetResourceTags(d, "ExperimentPlan"); err != nil { return WrapError(err) } } d.Partial(false) return resourceAliCloudEfloExperimentPlanRead(d, meta) } func resourceAliCloudEfloExperimentPlanDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) action := "DeleteExperimentPlan" var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) var err error request = make(map[string]interface{}) request["PlanId"] = d.Id() request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError { response, err = client.RpcPost("eflo-cnp", "2023-08-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) addDebug(action, response, request) if err != nil { if IsExpectedErrors(err, []string{"NotFound"}) || NotFoundError(err) { return nil } return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } return nil }