in alicloud/resource_alicloud_service_mesh_service_mesh.go [1136:1929]
func resourceAliCloudServiceMeshServiceMeshUpdate(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)
action := "UpdateMeshFeature"
var err error
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if !d.IsNewResource() && d.HasChange("mesh_config.0.tracing") {
update = true
jsonPathResult, err := jsonpath.Get("$[0].tracing", d.Get("mesh_config"))
if err == nil {
request["Tracing"] = jsonPathResult
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.pilot.0.trace_sampling") {
update = true
jsonPathResult1, err := jsonpath.Get("$[0].pilot[0].trace_sampling", d.Get("mesh_config"))
if err == nil {
request["TraceSampling"] = jsonPathResult1
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.telemetry") {
update = true
jsonPathResult2, err := jsonpath.Get("$[0].telemetry", d.Get("mesh_config"))
if err == nil {
request["Telemetry"] = jsonPathResult2
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.customized_zipkin") {
update = true
jsonPathResult3, err := jsonpath.Get("$[0].customized_zipkin", d.Get("mesh_config"))
if err == nil {
request["CustomizedZipkin"] = jsonPathResult3
}
}
if d.HasChange("mesh_config.0.outbound_traffic_policy") {
update = true
jsonPathResult4, err := jsonpath.Get("$[0].outbound_traffic_policy", d.Get("mesh_config"))
if err == nil {
request["OutboundTrafficPolicy"] = jsonPathResult4
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.include_ip_ranges") {
update = true
jsonPathResult5, err := jsonpath.Get("$[0].include_ip_ranges", d.Get("mesh_config"))
if err == nil {
request["IncludeIPRanges"] = jsonPathResult5
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.enable_namespaces_by_default") {
update = true
jsonPathResult6, err := jsonpath.Get("$[0].sidecar_injector[0].enable_namespaces_by_default", d.Get("mesh_config"))
if err == nil {
request["EnableNamespacesByDefault"] = jsonPathResult6
}
}
if d.HasChange("mesh_config.0.pilot.0.http10_enabled") {
update = true
jsonPathResult7, err := jsonpath.Get("$[0].pilot[0].http10_enabled", d.Get("mesh_config"))
if err == nil {
request["Http10Enabled"] = jsonPathResult7
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.log_level") {
update = true
jsonPathResult8, err := jsonpath.Get("$[0].opa[0].log_level", d.Get("mesh_config"))
if err == nil {
request["OPALogLevel"] = jsonPathResult8
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.request_cpu") {
update = true
jsonPathResult9, err := jsonpath.Get("$[0].opa[0].request_cpu", d.Get("mesh_config"))
if err == nil {
request["OPARequestCPU"] = jsonPathResult9
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.request_memory") {
update = true
jsonPathResult10, err := jsonpath.Get("$[0].opa[0].request_memory", d.Get("mesh_config"))
if err == nil {
request["OPARequestMemory"] = jsonPathResult10
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.limit_cpu") {
update = true
jsonPathResult11, err := jsonpath.Get("$[0].opa[0].limit_cpu", d.Get("mesh_config"))
if err == nil {
request["OPALimitCPU"] = jsonPathResult11
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.limit_memory") {
update = true
jsonPathResult12, err := jsonpath.Get("$[0].opa[0].limit_memory", d.Get("mesh_config"))
if err == nil {
request["OPALimitMemory"] = jsonPathResult12
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.proxy.0.limit_cpu") {
update = true
jsonPathResult13, err := jsonpath.Get("$[0].proxy[0].limit_cpu", d.Get("mesh_config"))
if err == nil {
request["ProxyLimitCPU"] = jsonPathResult13
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.proxy.0.request_cpu") {
update = true
jsonPathResult14, err := jsonpath.Get("$[0].proxy[0].request_cpu", d.Get("mesh_config"))
if err == nil {
request["ProxyRequestCPU"] = jsonPathResult14
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.proxy.0.limit_memory") {
update = true
jsonPathResult15, err := jsonpath.Get("$[0].proxy[0].limit_memory", d.Get("mesh_config"))
if err == nil {
request["ProxyLimitMemory"] = jsonPathResult15
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.access_log.0.enabled") {
update = true
jsonPathResult16, err := jsonpath.Get("$[0].access_log[0].enabled", d.Get("mesh_config"))
if err == nil {
request["AccessLogEnabled"] = jsonPathResult16
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.init_cni_configuration.0.exclude_namespaces") && (d.Get("cluster_spec") == "enterprise" || d.Get("cluster_spec") == "ultimate") {
update = true
jsonPathResult18, err := jsonpath.Get("$[0].sidecar_injector[0].init_cni_configuration[0].exclude_namespaces", d.Get("mesh_config"))
if err == nil {
request["CniExcludeNamespaces"] = jsonPathResult18
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.init_cni_configuration.0.enabled") && (d.Get("cluster_spec") == "enterprise" || d.Get("cluster_spec") == "ultimate") {
update = true
}
jsonPathResult19, err := jsonpath.Get("$[0].sidecar_injector[0].init_cni_configuration[0].enabled", d.Get("mesh_config"))
if err == nil {
request["CniEnabled"] = jsonPathResult19
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.proxy.0.request_memory") {
update = true
jsonPathResult19, err := jsonpath.Get("$[0].proxy[0].request_memory", d.Get("mesh_config"))
if err == nil {
request["ProxyRequestMemory"] = jsonPathResult19
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.request_memory") {
update = true
jsonPathResult20, err := jsonpath.Get("$[0].sidecar_injector[0].request_memory", d.Get("mesh_config"))
if err == nil {
request["SidecarInjectorRequestMemory"] = jsonPathResult20
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.limit_memory") {
update = true
jsonPathResult21, err := jsonpath.Get("$[0].sidecar_injector[0].limit_memory", d.Get("mesh_config"))
if err == nil {
request["SidecarInjectorLimitMemory"] = jsonPathResult21
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.limit_cpu") {
update = true
jsonPathResult22, err := jsonpath.Get("$[0].sidecar_injector[0].limit_cpu", d.Get("mesh_config"))
if err == nil {
request["SidecarInjectorLimitCPU"] = jsonPathResult22
}
}
if d.HasChange("mesh_config.0.sidecar_injector.0.request_cpu") {
update = true
jsonPathResult23, err := jsonpath.Get("$[0].sidecar_injector[0].request_cpu", d.Get("mesh_config"))
if err == nil {
request["SidecarInjectorRequestCPU"] = jsonPathResult23
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.opa.0.enabled") {
update = true
}
jsonPathResult25, err := jsonpath.Get("$[0].opa[0].enabled", d.Get("mesh_config"))
if err == nil {
request["OpaEnabled"] = jsonPathResult25
}
if v, ok := d.GetOkExists("customized_prometheus"); ok {
request["CustomizedPrometheus"] = v
}
if v, ok := d.GetOk("prometheus_url"); ok {
request["PrometheusUrl"] = v
}
if d.HasChange("mesh_config.0.sidecar_injector.0.auto_injection_policy_enabled") {
update = true
}
jsonPathResult28, err := jsonpath.Get("$[0].sidecar_injector[0].auto_injection_policy_enabled", d.Get("mesh_config"))
if err == nil {
request["AutoInjectionPolicyEnabled"] = jsonPathResult28
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.access_log.0.project") {
update = true
jsonPathResult28, err := jsonpath.Get("$[0].access_log[0].project", d.Get("mesh_config"))
if err == nil {
request["AccessLogProject"] = jsonPathResult28
}
}
if d.HasChange("mesh_config.0.access_log.0.gateway_enabled") {
update = true
jsonPathResult29, err := jsonpath.Get("$[0].access_log[0].gateway_enabled", d.Get("mesh_config"))
if err == nil {
request["AccessLogGatewayEnabled"] = jsonPathResult29
}
}
if d.HasChange("mesh_config.0.access_log.0.sidecar_enabled") {
update = true
jsonPathResult30, err := jsonpath.Get("$[0].access_log[0].sidecar_enabled", d.Get("mesh_config"))
if err == nil {
request["AccessLogSidecarEnabled"] = jsonPathResult30
}
}
if d.HasChange("mesh_config.0.access_log.0.gateway_lifecycle") {
update = true
jsonPathResult31, err := jsonpath.Get("$[0].access_log[0].gateway_lifecycle", d.Get("mesh_config"))
if err == nil && jsonPathResult31.(int) > 0 {
request["AccessLogGatewayLifecycle"] = jsonPathResult31
}
}
if d.HasChange("mesh_config.0.access_log.0.sidecar_lifecycle") {
update = true
jsonPathResult32, err := jsonpath.Get("$[0].access_log[0].sidecar_lifecycle", d.Get("mesh_config"))
if err == nil && jsonPathResult32.(int) > 0 {
request["AccessLogSidecarLifecycle"] = jsonPathResult32
}
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.audit.0.project") {
update = true
}
jsonPathResult34, err := jsonpath.Get("$[0].audit[0].project", d.Get("mesh_config"))
if err == nil {
request["AuditProject"] = jsonPathResult34
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.audit.0.enabled") {
update = true
}
jsonPathResult35, err := jsonpath.Get("$[0].audit[0].enabled", d.Get("mesh_config"))
if err == nil {
request["EnableAudit"] = jsonPathResult35
}
if !d.IsNewResource() && d.HasChange("cluster_spec") {
update = true
request["ClusterSpec"] = d.Get("cluster_spec")
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 30*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
update = false
action = "UpdateMeshCRAggregation"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if d.HasChange("extra_configuration.0.cr_aggregation_enabled") {
update = true
jsonPathResult, err := jsonpath.Get("$[0].cr_aggregation_enabled", d.Get("extra_configuration"))
if err == nil {
request["Enabled"] = jsonPathResult
}
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
update = false
action = "UpgradeMeshEditionPartially"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if !d.IsNewResource() && d.HasChange("version") {
update = true
request["ExpectedVersion"] = d.Get("version")
}
request["ASMGatewayContinue"] = "false"
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 30*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
update = false
action = "UpdateControlPlaneLogConfig"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if !d.IsNewResource() && d.HasChange("mesh_config.0.control_plane_log.0.enabled") {
update = true
}
jsonPathResult, err := jsonpath.Get("$[0].control_plane_log[0].enabled", d.Get("mesh_config"))
if err == nil {
request["Enabled"] = jsonPathResult
}
if !d.IsNewResource() && d.HasChange("mesh_config.0.control_plane_log.0.project") {
update = true
jsonPathResult1, err := jsonpath.Get("$[0].control_plane_log[0].project", d.Get("mesh_config"))
if err == nil {
request["Project"] = jsonPathResult1
}
}
if d.HasChange("mesh_config.0.control_plane_log.0.log_ttl_in_day") {
update = true
jsonPathResult2, err := jsonpath.Get("$[0].control_plane_log[0].log_ttl_in_day", d.Get("mesh_config"))
if err == nil && jsonPathResult2.(int) > 0 {
request["LogTTLInDay"] = jsonPathResult2
}
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
update = false
action = "ModifyServiceMeshName"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if !d.IsNewResource() && d.HasChange("service_mesh_name") {
update = true
}
request["Name"] = d.Get("service_mesh_name")
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
update = false
action = "UpdateKialiConfiguration"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if !d.IsNewResource() && d.HasChange("mesh_config.0.kiali.0.enabled") {
update = true
jsonPathResult, err := jsonpath.Get("$[0].kiali[0].enabled", d.Get("mesh_config"))
if err == nil {
request["Enabled"] = jsonPathResult
}
}
if d.HasChange("mesh_config.0.kiali.0.custom_prometheus_url") {
update = true
jsonPathResult1, err := jsonpath.Get("$[0].kiali[0].custom_prometheus_url", d.Get("mesh_config"))
if err == nil {
request["CustomPrometheusUrl"] = jsonPathResult1
}
}
if d.HasChange("mesh_config.0.kiali.0.integrate_clb") {
update = true
jsonPathResult2, err := jsonpath.Get("$[0].kiali[0].integrate_clb", d.Get("mesh_config"))
if err == nil {
request["IntegrateCLB"] = jsonPathResult2
}
}
if d.HasChange("mesh_config.0.kiali.0.kiali_service_annotations") {
update = true
jsonPathResult3, err := jsonpath.Get("$[0].kiali[0].kiali_service_annotations", d.Get("mesh_config"))
if err == nil {
request["KialiServiceAnnotations"] = jsonPathResult3
}
}
if d.HasChange("mesh_config.0.kiali.0.kiali_arms_auth_tokens") {
update = true
jsonPathResult4, err := jsonpath.Get("$[0].kiali[0].kiali_arms_auth_tokens", d.Get("mesh_config"))
if err == nil {
request["KialiArmsAuthTokens"] = jsonPathResult4
}
}
if d.HasChange("mesh_config.0.kiali.0.auth_strategy") {
update = true
jsonPathResult5, err := jsonpath.Get("$[0].kiali[0].auth_strategy", d.Get("mesh_config"))
if err == nil {
request["AuthStrategy"] = jsonPathResult5
}
}
if d.HasChange("mesh_config") {
update = true
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("mesh_config"); !IsNil(v) {
redirectUris1, _ := jsonpath.Get("$[0].kiali[0].ram_oauth_config[0].redirect_uris", v)
if redirectUris1 != nil && (d.HasChange("mesh_config.0.kiali.0.ram_oauth_config.0.redirect_uris") || redirectUris1 != "") {
objectDataLocalMap["RedirectUris"] = redirectUris1
}
objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap)
if err != nil {
return WrapError(err)
}
request["RAMOAuthConfig"] = string(objectDataLocalMapJson)
}
}
if d.HasChange("mesh_config") {
update = true
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("mesh_config"); !IsNil(v) {
clientId1, _ := jsonpath.Get("$[0].kiali[0].open_id_config[0].client_id", v)
if clientId1 != nil && (d.HasChange("mesh_config.0.kiali.0.open_id_config.0.client_id") || clientId1 != "") {
objectDataLocalMap1["ClientId"] = clientId1
}
clientSecret1, _ := jsonpath.Get("$[0].kiali[0].open_id_config[0].client_secret", v)
if clientSecret1 != nil && (d.HasChange("mesh_config.0.kiali.0.open_id_config.0.client_secret") || clientSecret1 != "") {
objectDataLocalMap1["ClientSecret"] = clientSecret1
}
issuerUri1, _ := jsonpath.Get("$[0].kiali[0].open_id_config[0].issuer_uri", v)
if issuerUri1 != nil && (d.HasChange("mesh_config.0.kiali.0.open_id_config.0.issuer_uri") || issuerUri1 != "") {
objectDataLocalMap1["IssuerUri"] = issuerUri1
}
scopes1, _ := jsonpath.Get("$[0].kiali[0].open_id_config[0].scopes", d.Get("mesh_config"))
if scopes1 != nil && (d.HasChange("mesh_config.0.kiali.0.open_id_config.0.scopes") || scopes1 != "") {
objectDataLocalMap1["Scopes"] = scopes1
}
objectDataLocalMap1Json, err := json.Marshal(objectDataLocalMap1)
if err != nil {
return WrapError(err)
}
request["OpenIdConfig"] = string(objectDataLocalMap1Json)
}
}
if d.HasChange("mesh_config") {
update = true
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("mesh_config"); !IsNil(v) {
webFqdn, _ := jsonpath.Get("$[0].kiali[0].server_config[0].web_fqdn", v)
if webFqdn != nil && (d.HasChange("mesh_config.0.kiali.0.server_config.0.web_fqdn") || webFqdn != "") {
objectDataLocalMap2["WebFQDN"] = webFqdn
}
webPort1, _ := jsonpath.Get("$[0].kiali[0].server_config[0].web_port", v)
if webPort1 != nil && (d.HasChange("mesh_config.0.kiali.0.server_config.0.web_port") || webPort1 != "") {
objectDataLocalMap2["WebPort"] = webPort1
}
webRoot1, _ := jsonpath.Get("$[0].kiali[0].server_config[0].web_root", v)
if webRoot1 != nil && (d.HasChange("mesh_config.0.kiali.0.server_config.0.web_root") || webRoot1 != "") {
objectDataLocalMap2["WebRoot"] = webRoot1
}
webSchema1, _ := jsonpath.Get("$[0].kiali[0].server_config[0].web_schema", v)
if webSchema1 != nil && (d.HasChange("mesh_config.0.kiali.0.server_config.0.web_schema") || webSchema1 != "") {
objectDataLocalMap2["WebSchema"] = webSchema1
}
objectDataLocalMap2Json, err := json.Marshal(objectDataLocalMap2)
if err != nil {
return WrapError(err)
}
request["ServerConfig"] = string(objectDataLocalMap2Json)
}
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
if d.HasChange("cluster_ids") {
oldEntry, newEntry := d.GetChange("cluster_ids")
removed := oldEntry
added := newEntry
if len(removed.([]interface{})) > 0 {
clusterIds := removed.([]interface{})
for _, item := range clusterIds {
action := "RemoveClusterFromServiceMesh"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if v, ok := item.(string); ok {
jsonPathResult, err := jsonpath.Get("$", v)
if err != nil {
return WrapError(err)
}
request["ClusterId"] = jsonPathResult
}
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
}
if len(added.([]interface{})) > 0 {
clusterIds := added.([]interface{})
for _, item := range clusterIds {
action := "AddClusterIntoServiceMesh"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if v, ok := item.(string); ok {
jsonPathResult, err := jsonpath.Get("$", v)
if err != nil {
return WrapError(err)
}
request["ClusterId"] = jsonPathResult
}
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
}
}
if d.HasChange("tags") {
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
if err := serviceMeshServiceV2.SetResourceTags(d, "servicemesh"); err != nil {
return WrapError(err)
}
}
if !d.IsNewResource() && d.HasChange("load_balancer.0.pilot_public_eip_id") {
oldEntry, newEntry := d.GetChange("load_balancer.0.pilot_public_eip_id")
removed, removedOk := oldEntry.(string)
added, addedOk := newEntry.(string)
log.Printf("[INFO] Resource load_balancer.0.pilot_public_eip_id removed %s removedOk %v added %s addedOk %v", removed, removedOk, added, addedOk)
if removedOk && len(removed) > 0 && added != removed {
action := "ModifyPilotEipResource"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
request["Operation"] = "UnBindEip"
if v, ok := d.GetOk("load_balancer"); ok {
jsonPathResult, err := jsonpath.Get("$[0].pilot_public_eip_id", v)
if err == nil && jsonPathResult != "" {
request["EipId"] = jsonPathResult
}
}
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
if addedOk && len(added) > 0 && added != removed {
action := "ModifyPilotEipResource"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ServiceMeshId"] = d.Id()
if v, ok := d.GetOk("load_balancer"); ok {
jsonPathResult, err := jsonpath.Get("$[0].pilot_public_eip_id", v)
if err == nil && jsonPathResult != "" {
request["EipId"] = jsonPathResult
}
}
request["Operation"] = "BindEip"
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("servicemesh", "2020-01-11", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
serviceMeshServiceV2 := ServiceMeshServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, serviceMeshServiceV2.ServiceMeshServiceMeshStateRefreshFunc(d.Id(), "$.ServiceMeshInfo.State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
}
d.Partial(false)
return resourceAliCloudServiceMeshServiceMeshRead(d, meta)
}