alicloud/resource_alicloud_esa_cache_rule.go (450 lines of code) (raw):

// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you! package alicloud import ( "fmt" "log" "strings" "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 resourceAliCloudEsaCacheRule() *schema.Resource { return &schema.Resource{ Create: resourceAliCloudEsaCacheRuleCreate, Read: resourceAliCloudEsaCacheRuleRead, Update: resourceAliCloudEsaCacheRuleUpdate, Delete: resourceAliCloudEsaCacheRuleDelete, 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{ "additional_cacheable_ports": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"8880", "2052", "2082", "2086", "2095", "2053", "2083", "2087", "2096"}, false), }, "browser_cache_mode": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"no_cache", "follow_origin", "override_origin"}, false), }, "browser_cache_ttl": { Type: schema.TypeString, Optional: true, }, "bypass_cache": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"cache_all", "bypass_all"}, false), }, "cache_deception_armor": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "cache_reserve_eligibility": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"bypass_cache_reserve", "eligible_for_cache_reserve"}, false), }, "cache_rule_id": { Type: schema.TypeInt, Computed: true, }, "check_presence_cookie": { Type: schema.TypeString, Optional: true, }, "check_presence_header": { Type: schema.TypeString, Optional: true, }, "edge_cache_mode": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"follow_origin", "no_cache", "override_origin", "follow_origin_bypass"}, false), }, "edge_cache_ttl": { Type: schema.TypeString, Optional: true, }, "edge_status_code_cache_ttl": { Type: schema.TypeString, Optional: true, }, "include_cookie": { Type: schema.TypeString, Optional: true, }, "include_header": { Type: schema.TypeString, Optional: true, }, "query_string": { Type: schema.TypeString, Optional: true, }, "query_string_mode": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"ignore_all", "exclude_query_string", "reserve_all", "include_query_string"}, false), }, "rule": { Type: schema.TypeString, Optional: true, }, "rule_enable": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "rule_name": { Type: schema.TypeString, Optional: true, }, "serve_stale": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "site_id": { Type: schema.TypeInt, Required: true, ForceNew: true, }, "site_version": { Type: schema.TypeInt, Optional: true, ForceNew: true, }, "sort_query_string_for_cache": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "user_device_type": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "user_geo": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, "user_language": { Type: schema.TypeString, Optional: true, ValidateFunc: StringInSlice([]string{"on", "off"}, false), }, }, } } func resourceAliCloudEsaCacheRuleCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) action := "CreateCacheRule" var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) var err error request = make(map[string]interface{}) if v, ok := d.GetOk("site_id"); ok { request["SiteId"] = v } request["RegionId"] = client.RegionId if v, ok := d.GetOk("check_presence_cookie"); ok { request["CheckPresenceCookie"] = v } if v, ok := d.GetOk("additional_cacheable_ports"); ok { request["AdditionalCacheablePorts"] = v } if v, ok := d.GetOkExists("site_version"); ok { request["SiteVersion"] = v } if v, ok := d.GetOk("query_string_mode"); ok { request["QueryStringMode"] = v } if v, ok := d.GetOk("sort_query_string_for_cache"); ok { request["SortQueryStringForCache"] = v } if v, ok := d.GetOk("include_cookie"); ok { request["IncludeCookie"] = v } if v, ok := d.GetOk("edge_cache_mode"); ok { request["EdgeCacheMode"] = v } if v, ok := d.GetOk("check_presence_header"); ok { request["CheckPresenceHeader"] = v } if v, ok := d.GetOk("edge_cache_ttl"); ok { request["EdgeCacheTtl"] = v } if v, ok := d.GetOk("include_header"); ok { request["IncludeHeader"] = v } if v, ok := d.GetOk("user_geo"); ok { request["UserGeo"] = v } if v, ok := d.GetOk("query_string"); ok { request["QueryString"] = v } if v, ok := d.GetOk("serve_stale"); ok { request["ServeStale"] = v } if v, ok := d.GetOk("bypass_cache"); ok { request["BypassCache"] = v } if v, ok := d.GetOk("cache_deception_armor"); ok { request["CacheDeceptionArmor"] = v } if v, ok := d.GetOk("rule_enable"); ok { request["RuleEnable"] = v } if v, ok := d.GetOk("rule_name"); ok { request["RuleName"] = v } if v, ok := d.GetOk("browser_cache_ttl"); ok { request["BrowserCacheTtl"] = v } if v, ok := d.GetOk("cache_reserve_eligibility"); ok { request["CacheReserveEligibility"] = v } if v, ok := d.GetOk("user_device_type"); ok { request["UserDeviceType"] = v } if v, ok := d.GetOk("rule"); ok { request["Rule"] = v } if v, ok := d.GetOk("edge_status_code_cache_ttl"); ok { request["EdgeStatusCodeCacheTtl"] = v } if v, ok := d.GetOk("user_language"); ok { request["UserLanguage"] = v } if v, ok := d.GetOk("browser_cache_mode"); ok { request["BrowserCacheMode"] = v } wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError { response, err = client.RpcPost("ESA", "2024-09-10", 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_esa_cache_rule", action, AlibabaCloudSdkGoERROR) } d.SetId(fmt.Sprintf("%v:%v", request["SiteId"], response["ConfigId"])) return resourceAliCloudEsaCacheRuleRead(d, meta) } func resourceAliCloudEsaCacheRuleRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) esaServiceV2 := EsaServiceV2{client} objectRaw, err := esaServiceV2.DescribeEsaCacheRule(d.Id()) if err != nil { if !d.IsNewResource() && NotFoundError(err) { log.Printf("[DEBUG] Resource alicloud_esa_cache_rule DescribeEsaCacheRule Failed!!! %s", err) d.SetId("") return nil } return WrapError(err) } d.Set("additional_cacheable_ports", objectRaw["AdditionalCacheablePorts"]) d.Set("browser_cache_mode", objectRaw["BrowserCacheMode"]) d.Set("browser_cache_ttl", objectRaw["BrowserCacheTtl"]) d.Set("bypass_cache", objectRaw["BypassCache"]) d.Set("cache_deception_armor", objectRaw["CacheDeceptionArmor"]) d.Set("cache_reserve_eligibility", objectRaw["CacheReserveEligibility"]) d.Set("check_presence_cookie", objectRaw["CheckPresenceCookie"]) d.Set("check_presence_header", objectRaw["CheckPresenceHeader"]) d.Set("edge_cache_mode", objectRaw["EdgeCacheMode"]) d.Set("edge_cache_ttl", objectRaw["EdgeCacheTtl"]) d.Set("edge_status_code_cache_ttl", objectRaw["EdgeStatusCodeCacheTtl"]) d.Set("include_cookie", objectRaw["IncludeCookie"]) d.Set("include_header", objectRaw["IncludeHeader"]) d.Set("query_string", objectRaw["QueryString"]) d.Set("query_string_mode", objectRaw["QueryStringMode"]) d.Set("rule", objectRaw["Rule"]) d.Set("rule_enable", objectRaw["RuleEnable"]) d.Set("rule_name", objectRaw["RuleName"]) d.Set("serve_stale", objectRaw["ServeStale"]) d.Set("site_version", objectRaw["SiteVersion"]) d.Set("sort_query_string_for_cache", objectRaw["SortQueryStringForCache"]) d.Set("user_device_type", objectRaw["UserDeviceType"]) d.Set("user_geo", objectRaw["UserGeo"]) d.Set("user_language", objectRaw["UserLanguage"]) d.Set("cache_rule_id", objectRaw["ConfigId"]) parts := strings.Split(d.Id(), ":") d.Set("site_id", formatInt(parts[0])) return nil } func resourceAliCloudEsaCacheRuleUpdate(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 var err error parts := strings.Split(d.Id(), ":") action := "UpdateCacheRule" request = make(map[string]interface{}) query = make(map[string]interface{}) request["SiteId"] = parts[0] request["ConfigId"] = parts[1] request["RegionId"] = client.RegionId if d.HasChange("check_presence_cookie") { update = true request["CheckPresenceCookie"] = d.Get("check_presence_cookie") } if d.HasChange("additional_cacheable_ports") { update = true request["AdditionalCacheablePorts"] = d.Get("additional_cacheable_ports") } if d.HasChange("query_string_mode") { update = true request["QueryStringMode"] = d.Get("query_string_mode") } if d.HasChange("sort_query_string_for_cache") { update = true request["SortQueryStringForCache"] = d.Get("sort_query_string_for_cache") } if d.HasChange("include_cookie") { update = true request["IncludeCookie"] = d.Get("include_cookie") } if d.HasChange("edge_cache_mode") { update = true request["EdgeCacheMode"] = d.Get("edge_cache_mode") } if d.HasChange("check_presence_header") { update = true request["CheckPresenceHeader"] = d.Get("check_presence_header") } if d.HasChange("edge_cache_ttl") { update = true request["EdgeCacheTtl"] = d.Get("edge_cache_ttl") } if d.HasChange("include_header") { update = true request["IncludeHeader"] = d.Get("include_header") } if d.HasChange("user_geo") { update = true request["UserGeo"] = d.Get("user_geo") } if d.HasChange("query_string") { update = true request["QueryString"] = d.Get("query_string") } if d.HasChange("serve_stale") { update = true request["ServeStale"] = d.Get("serve_stale") } if d.HasChange("bypass_cache") { update = true request["BypassCache"] = d.Get("bypass_cache") } if d.HasChange("cache_deception_armor") { update = true request["CacheDeceptionArmor"] = d.Get("cache_deception_armor") } if d.HasChange("rule_enable") { update = true request["RuleEnable"] = d.Get("rule_enable") } if d.HasChange("rule_name") { update = true request["RuleName"] = d.Get("rule_name") } if d.HasChange("browser_cache_ttl") { update = true request["BrowserCacheTtl"] = d.Get("browser_cache_ttl") } if d.HasChange("cache_reserve_eligibility") { update = true request["CacheReserveEligibility"] = d.Get("cache_reserve_eligibility") } if d.HasChange("user_device_type") { update = true request["UserDeviceType"] = d.Get("user_device_type") } if d.HasChange("rule") { update = true request["Rule"] = d.Get("rule") } if d.HasChange("edge_status_code_cache_ttl") { update = true request["EdgeStatusCodeCacheTtl"] = d.Get("edge_status_code_cache_ttl") } if d.HasChange("user_language") { update = true request["UserLanguage"] = d.Get("user_language") } if d.HasChange("browser_cache_mode") { update = true request["BrowserCacheMode"] = d.Get("browser_cache_mode") } if update { wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("ESA", "2024-09-10", 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) } } return resourceAliCloudEsaCacheRuleRead(d, meta) } func resourceAliCloudEsaCacheRuleDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AliyunClient) parts := strings.Split(d.Id(), ":") action := "DeleteCacheRule" var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) var err error request = make(map[string]interface{}) request["ConfigId"] = parts[1] request["SiteId"] = parts[0] 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("ESA", "2024-09-10", 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 NotFoundError(err) { return nil } return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } return nil }