in alicloud/resource_alicloud_vpn_gateway_vpn_attachment.go [907:1241]
func resourceAliCloudVpnGatewayVpnAttachmentUpdate(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 := "ModifyVpnAttachmentAttribute"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["VpnConnectionId"] = d.Id()
request["RegionId"] = client.RegionId
request["ClientToken"] = buildClientToken(action)
if !d.IsNewResource() && d.HasChange("effect_immediately") {
update = true
request["EffectImmediately"] = d.Get("effect_immediately")
}
if !d.IsNewResource() && d.HasChange("local_subnet") {
update = true
}
request["LocalSubnet"] = d.Get("local_subnet")
if !d.IsNewResource() && d.HasChange("remote_subnet") {
update = true
}
request["RemoteSubnet"] = d.Get("remote_subnet")
if !d.IsNewResource() && d.HasChange("vpn_attachment_name") {
update = true
request["Name"] = d.Get("vpn_attachment_name")
}
if !d.IsNewResource() && d.HasChange("enable_dpd") {
update = true
request["EnableDpd"] = d.Get("enable_dpd")
}
if !d.IsNewResource() && d.HasChange("enable_nat_traversal") {
update = true
request["EnableNatTraversal"] = d.Get("enable_nat_traversal")
}
if !d.IsNewResource() && d.HasChange("bgp_config") {
update = true
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("bgp_config"); v != nil {
enable, _ := jsonpath.Get("$[0].enable", v)
if enable != nil && (d.HasChange("bgp_config.0.enable") || enable != "") {
objectDataLocalMap["EnableBgp"] = enable
}
tunnelCidr1, _ := jsonpath.Get("$[0].tunnel_cidr", v)
if tunnelCidr1 != nil && (d.HasChange("bgp_config.0.tunnel_cidr") || tunnelCidr1 != "") {
objectDataLocalMap["TunnelCidr"] = tunnelCidr1
}
localBgpIp1, _ := jsonpath.Get("$[0].local_bgp_ip", v)
if localBgpIp1 != nil && (d.HasChange("bgp_config.0.local_bgp_ip") || localBgpIp1 != "") {
objectDataLocalMap["LocalBgpIp"] = localBgpIp1
}
localAsn1, _ := jsonpath.Get("$[0].local_asn", v)
if localAsn1 != nil && (d.HasChange("bgp_config.0.local_asn") || localAsn1 != "") {
objectDataLocalMap["LocalAsn"] = localAsn1
}
request["BgpConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap)
}
}
if !d.IsNewResource() && d.HasChange("customer_gateway_id") {
update = true
request["CustomerGatewayId"] = d.Get("customer_gateway_id")
}
if !d.IsNewResource() && d.HasChange("enable_tunnels_bgp") {
update = true
request["EnableTunnelsBgp"] = d.Get("enable_tunnels_bgp")
}
if !d.IsNewResource() && d.HasChange("tunnel_options_specification") {
update = true
if v, ok := d.GetOk("tunnel_options_specification"); ok || d.HasChange("tunnel_options_specification") {
tunnelOptionsSpecificationMapsArray := make([]interface{}, 0)
for _, dataLoop := range v.(*schema.Set).List() {
dataLoopTmp := dataLoop.(map[string]interface{})
dataLoopMap := make(map[string]interface{})
dataLoopMap["CustomerGatewayId"] = dataLoopTmp["customer_gateway_id"]
dataLoopMap["EnableDpd"] = dataLoopTmp["enable_dpd"]
dataLoopMap["EnableNatTraversal"] = dataLoopTmp["enable_nat_traversal"]
dataLoopMap["TunnelIndex"] = dataLoopTmp["tunnel_index"]
if !IsNil(dataLoopTmp["tunnel_bgp_config"]) {
localData1 := make(map[string]interface{})
localAsn3, _ := jsonpath.Get("$[0].local_asn", dataLoopTmp["tunnel_bgp_config"])
if localAsn3 != nil && localAsn3 != "" {
localData1["LocalAsn"] = localAsn3
}
localBgpIp3, _ := jsonpath.Get("$[0].local_bgp_ip", dataLoopTmp["tunnel_bgp_config"])
if localBgpIp3 != nil && localBgpIp3 != "" {
localData1["LocalBgpIp"] = localBgpIp3
}
tunnelCidr3, _ := jsonpath.Get("$[0].tunnel_cidr", dataLoopTmp["tunnel_bgp_config"])
if tunnelCidr3 != nil && tunnelCidr3 != "" {
localData1["TunnelCidr"] = tunnelCidr3
}
dataLoopMap["TunnelBgpConfig"] = localData1
}
if !IsNil(dataLoopTmp["tunnel_ike_config"]) {
localData2 := make(map[string]interface{})
ikeAuthAlg1, _ := jsonpath.Get("$[0].ike_auth_alg", dataLoopTmp["tunnel_ike_config"])
if ikeAuthAlg1 != nil && ikeAuthAlg1 != "" {
localData2["IkeAuthAlg"] = ikeAuthAlg1
}
ikeEncAlg1, _ := jsonpath.Get("$[0].ike_enc_alg", dataLoopTmp["tunnel_ike_config"])
if ikeEncAlg1 != nil && ikeEncAlg1 != "" {
localData2["IkeEncAlg"] = ikeEncAlg1
}
ikeLifetime1, _ := jsonpath.Get("$[0].ike_lifetime", dataLoopTmp["tunnel_ike_config"])
if ikeLifetime1 != nil && ikeLifetime1 != "" {
localData2["IkeLifetime"] = ikeLifetime1
}
ikeMode1, _ := jsonpath.Get("$[0].ike_mode", dataLoopTmp["tunnel_ike_config"])
if ikeMode1 != nil && ikeMode1 != "" {
localData2["IkeMode"] = ikeMode1
}
ikePfs1, _ := jsonpath.Get("$[0].ike_pfs", dataLoopTmp["tunnel_ike_config"])
if ikePfs1 != nil && ikePfs1 != "" {
localData2["IkePfs"] = ikePfs1
}
ikeVersion1, _ := jsonpath.Get("$[0].ike_version", dataLoopTmp["tunnel_ike_config"])
if ikeVersion1 != nil && ikeVersion1 != "" {
localData2["IkeVersion"] = ikeVersion1
}
localId1, _ := jsonpath.Get("$[0].local_id", dataLoopTmp["tunnel_ike_config"])
if localId1 != nil && localId1 != "" {
localData2["LocalId"] = localId1
}
psk1, _ := jsonpath.Get("$[0].psk", dataLoopTmp["tunnel_ike_config"])
if psk1 != nil && psk1 != "" {
localData2["Psk"] = psk1
}
remoteId1, _ := jsonpath.Get("$[0].remote_id", dataLoopTmp["tunnel_ike_config"])
if remoteId1 != nil && remoteId1 != "" {
localData2["RemoteId"] = remoteId1
}
dataLoopMap["TunnelIkeConfig"] = localData2
}
if !IsNil(dataLoopTmp["tunnel_ipsec_config"]) {
localData3 := make(map[string]interface{})
ipsecAuthAlg1, _ := jsonpath.Get("$[0].ipsec_auth_alg", dataLoopTmp["tunnel_ipsec_config"])
if ipsecAuthAlg1 != nil && ipsecAuthAlg1 != "" {
localData3["IpsecAuthAlg"] = ipsecAuthAlg1
}
ipsecEncAlg1, _ := jsonpath.Get("$[0].ipsec_enc_alg", dataLoopTmp["tunnel_ipsec_config"])
if ipsecEncAlg1 != nil && ipsecEncAlg1 != "" {
localData3["IpsecEncAlg"] = ipsecEncAlg1
}
ipsecLifetime1, _ := jsonpath.Get("$[0].ipsec_lifetime", dataLoopTmp["tunnel_ipsec_config"])
if ipsecLifetime1 != nil && ipsecLifetime1 != "" {
localData3["IpsecLifetime"] = ipsecLifetime1
}
ipsecPfs1, _ := jsonpath.Get("$[0].ipsec_pfs", dataLoopTmp["tunnel_ipsec_config"])
if ipsecPfs1 != nil && ipsecPfs1 != "" {
localData3["IpsecPfs"] = ipsecPfs1
}
dataLoopMap["TunnelIpsecConfig"] = localData3
}
tunnelOptionsSpecificationMapsArray = append(tunnelOptionsSpecificationMapsArray, dataLoopMap)
}
request["TunnelOptionsSpecification"] = tunnelOptionsSpecificationMapsArray
}
}
if !d.IsNewResource() && d.HasChange("ike_config") {
update = true
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("ike_config"); v != nil {
ikeAuthAlg3, _ := jsonpath.Get("$[0].ike_auth_alg", v)
if ikeAuthAlg3 != nil && (d.HasChange("ike_config.0.ike_auth_alg") || ikeAuthAlg3 != "") {
objectDataLocalMap1["IkeAuthAlg"] = ikeAuthAlg3
}
localId3, _ := jsonpath.Get("$[0].local_id", v)
if localId3 != nil && (d.HasChange("ike_config.0.local_id") || localId3 != "") {
objectDataLocalMap1["LocalId"] = localId3
}
ikeEncAlg3, _ := jsonpath.Get("$[0].ike_enc_alg", v)
if ikeEncAlg3 != nil && (d.HasChange("ike_config.0.ike_enc_alg") || ikeEncAlg3 != "") {
objectDataLocalMap1["IkeEncAlg"] = ikeEncAlg3
}
ikeVersion3, _ := jsonpath.Get("$[0].ike_version", v)
if ikeVersion3 != nil && (d.HasChange("ike_config.0.ike_version") || ikeVersion3 != "") {
objectDataLocalMap1["IkeVersion"] = ikeVersion3
}
ikeMode3, _ := jsonpath.Get("$[0].ike_mode", v)
if ikeMode3 != nil && (d.HasChange("ike_config.0.ike_mode") || ikeMode3 != "") {
objectDataLocalMap1["IkeMode"] = ikeMode3
}
ikeLifetime3, _ := jsonpath.Get("$[0].ike_lifetime", v)
if ikeLifetime3 != nil && (d.HasChange("ike_config.0.ike_lifetime") || ikeLifetime3 != "") {
objectDataLocalMap1["IkeLifetime"] = ikeLifetime3
}
psk3, _ := jsonpath.Get("$[0].psk", v)
if psk3 != nil && (d.HasChange("ike_config.0.psk") || psk3 != "") {
objectDataLocalMap1["Psk"] = psk3
}
remoteId3, _ := jsonpath.Get("$[0].remote_id", v)
if remoteId3 != nil && (d.HasChange("ike_config.0.remote_id") || remoteId3 != "") {
objectDataLocalMap1["RemoteId"] = remoteId3
}
ikePfs3, _ := jsonpath.Get("$[0].ike_pfs", v)
if ikePfs3 != nil && (d.HasChange("ike_config.0.ike_pfs") || ikePfs3 != "") {
objectDataLocalMap1["IkePfs"] = ikePfs3
}
request["IkeConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap1)
}
}
if !d.IsNewResource() && d.HasChange("ipsec_config") {
update = true
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("ipsec_config"); v != nil {
ipsecPfs3, _ := jsonpath.Get("$[0].ipsec_pfs", v)
if ipsecPfs3 != nil && (d.HasChange("ipsec_config.0.ipsec_pfs") || ipsecPfs3 != "") {
objectDataLocalMap2["IpsecPfs"] = ipsecPfs3
}
ipsecEncAlg3, _ := jsonpath.Get("$[0].ipsec_enc_alg", v)
if ipsecEncAlg3 != nil && (d.HasChange("ipsec_config.0.ipsec_enc_alg") || ipsecEncAlg3 != "") {
objectDataLocalMap2["IpsecEncAlg"] = ipsecEncAlg3
}
ipsecAuthAlg3, _ := jsonpath.Get("$[0].ipsec_auth_alg", v)
if ipsecAuthAlg3 != nil && (d.HasChange("ipsec_config.0.ipsec_auth_alg") || ipsecAuthAlg3 != "") {
objectDataLocalMap2["IpsecAuthAlg"] = ipsecAuthAlg3
}
ipsecLifetime3, _ := jsonpath.Get("$[0].ipsec_lifetime", v)
if ipsecLifetime3 != nil && (d.HasChange("ipsec_config.0.ipsec_lifetime") || ipsecLifetime3 != "") {
objectDataLocalMap2["IpsecLifetime"] = ipsecLifetime3
}
request["IpsecConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap2)
}
}
if d.HasChange("health_check_config") {
update = true
objectDataLocalMap3 := make(map[string]interface{})
if v := d.Get("health_check_config"); v != nil {
enable2, _ := jsonpath.Get("$[0].enable", v)
if enable2 != nil && (d.HasChange("health_check_config.0.enable") || enable2 != "") {
objectDataLocalMap3["Enable"] = enable2
}
dip1, _ := jsonpath.Get("$[0].dip", v)
if dip1 != nil && (d.HasChange("health_check_config.0.dip") || dip1 != "") {
objectDataLocalMap3["Dip"] = dip1
}
sip1, _ := jsonpath.Get("$[0].sip", v)
if sip1 != nil && (d.HasChange("health_check_config.0.sip") || sip1 != "") {
objectDataLocalMap3["Sip"] = sip1
}
interval1, _ := jsonpath.Get("$[0].interval", v)
if interval1 != nil && (d.HasChange("health_check_config.0.interval") || interval1 != "") {
objectDataLocalMap3["Interval"] = interval1
}
retry1, _ := jsonpath.Get("$[0].retry", v)
if retry1 != nil && (d.HasChange("health_check_config.0.retry") || retry1 != "") {
objectDataLocalMap3["Retry"] = retry1
}
policy1, _ := jsonpath.Get("$[0].policy", v)
if policy1 != nil && (d.HasChange("health_check_config.0.policy") || policy1 != "") {
objectDataLocalMap3["Policy"] = policy1
}
request["HealthCheckConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap3)
}
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"VpnConnection.Configuring", "Appliance.Configuring", "VpnTask.CONFLICT", "VpnGateway.Configuring"}) || 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)
}
}
update = false
action = "MoveVpnResourceGroup"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["InstanceId"] = d.Id()
request["RegionId"] = client.RegionId
if _, ok := d.GetOk("resource_group_id"); ok && !d.IsNewResource() && d.HasChange("resource_group_id") {
update = true
}
request["NewResourceGroupId"] = d.Get("resource_group_id")
request["ResourceType"] = "VPNATTACHMENT"
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("Vpc", "2016-04-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") {
vPNGatewayServiceV2 := VPNGatewayServiceV2{client}
if err := vPNGatewayServiceV2.SetResourceTags(d, "VPNATTACHMENT"); err != nil {
return WrapError(err)
}
}
d.Partial(false)
return resourceAliCloudVpnGatewayVpnAttachmentRead(d, meta)
}