in alicloud/resource_alicloud_vpn_connection.go [904:1227]
func resourceAliCloudVPNGatewayVpnConnectionUpdate(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
action := "ModifyVpnConnectionAttribute"
var err error
request = make(map[string]interface{})
query = make(map[string]interface{})
query["VpnConnectionId"] = d.Id()
request["RegionId"] = client.RegionId
request["ClientToken"] = buildClientToken(action)
if !d.IsNewResource() && d.HasChange("local_subnet") {
update = true
}
if !d.IsNewResource() && d.HasChange("remote_subnet") {
update = true
}
if v, ok := d.GetOk("local_subnet"); ok {
request["LocalSubnet"] = convertListToCommaSeparate(v.(*schema.Set).List())
}
if v, ok := d.GetOk("remote_subnet"); ok {
request["RemoteSubnet"] = convertListToCommaSeparate(v.(*schema.Set).List())
}
if !d.IsNewResource() && d.HasChange("effect_immediately") {
update = true
request["EffectImmediately"] = d.Get("effect_immediately")
}
if v, ok := d.GetOkExists("auto_config_route"); ok {
request["AutoConfigRoute"] = v
}
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("enable_tunnels_bgp") {
request["EnableTunnelsBgp"] = d.Get("enable_tunnels_bgp")
}
if !d.IsNewResource() && d.HasChange("name") {
update = true
request["Name"] = d.Get("name")
}
if !d.IsNewResource() && d.HasChange("vpn_connection_name") {
update = true
request["Name"] = d.Get("vpn_connection_name")
}
if !d.IsNewResource() && d.HasChange("ike_config") {
update = true
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("ike_config"); v != nil {
nodeNative, _ := jsonpath.Get("$[0].ike_lifetime", v)
if nodeNative != nil && nodeNative != "" {
objectDataLocalMap["IkeLifetime"] = nodeNative
}
nodeNative1, _ := jsonpath.Get("$[0].ike_enc_alg", v)
if nodeNative1 != nil && nodeNative1 != "" {
objectDataLocalMap["IkeEncAlg"] = nodeNative1
}
nodeNative2, _ := jsonpath.Get("$[0].ike_mode", v)
if nodeNative2 != nil && nodeNative2 != "" {
objectDataLocalMap["IkeMode"] = nodeNative2
}
nodeNative3, _ := jsonpath.Get("$[0].ike_version", v)
if nodeNative3 != nil && nodeNative3 != "" {
objectDataLocalMap["IkeVersion"] = nodeNative3
}
nodeNative4, _ := jsonpath.Get("$[0].ike_pfs", v)
if nodeNative4 != nil && nodeNative4 != "" {
objectDataLocalMap["IkePfs"] = nodeNative4
}
nodeNative5, _ := jsonpath.Get("$[0].psk", v)
if nodeNative5 != nil && nodeNative5 != "" {
objectDataLocalMap["Psk"] = nodeNative5
}
nodeNative6, _ := jsonpath.Get("$[0].ike_auth_alg", v)
if nodeNative6 != nil && nodeNative6 != "" {
objectDataLocalMap["IkeAuthAlg"] = nodeNative6
}
nodeNative7, _ := jsonpath.Get("$[0].ike_local_id", v)
if nodeNative7 != nil && nodeNative7 != "" {
objectDataLocalMap["LocalId"] = nodeNative7
}
nodeNative8, _ := jsonpath.Get("$[0].ike_remote_id", v)
if nodeNative8 != nil && nodeNative8 != "" {
objectDataLocalMap["RemoteId"] = nodeNative8
}
objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap)
if err != nil {
return WrapError(err)
}
request["IkeConfig"] = string(objectDataLocalMapJson)
}
}
if !d.IsNewResource() && d.HasChange("ipsec_config") {
update = true
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("ipsec_config"); v != nil {
nodeNative9, _ := jsonpath.Get("$[0].ipsec_auth_alg", v)
if nodeNative9 != nil && nodeNative9 != "" {
objectDataLocalMap1["IpsecAuthAlg"] = nodeNative9
}
nodeNative10, _ := jsonpath.Get("$[0].ipsec_lifetime", v)
if nodeNative10 != nil && nodeNative10 != "" {
objectDataLocalMap1["IpsecLifetime"] = nodeNative10
}
nodeNative11, _ := jsonpath.Get("$[0].ipsec_enc_alg", v)
if nodeNative11 != nil && nodeNative11 != "" {
objectDataLocalMap1["IpsecEncAlg"] = nodeNative11
}
nodeNative12, _ := jsonpath.Get("$[0].ipsec_pfs", v)
if nodeNative12 != nil && nodeNative12 != "" {
objectDataLocalMap1["IpsecPfs"] = nodeNative12
}
objectDataLocalMap1Json, err := json.Marshal(objectDataLocalMap1)
if err != nil {
return WrapError(err)
}
request["IpsecConfig"] = string(objectDataLocalMap1Json)
}
}
if !d.IsNewResource() && d.HasChange("bgp_config") {
update = true
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("bgp_config"); v != nil {
nodeNative13, _ := jsonpath.Get("$[0].tunnel_cidr", v)
if nodeNative13 != nil && nodeNative13 != "" {
objectDataLocalMap2["TunnelCidr"] = nodeNative13
}
nodeNative14, _ := jsonpath.Get("$[0].enable", v)
if nodeNative14 != nil && nodeNative14 != "" {
objectDataLocalMap2["EnableBgp"] = nodeNative14
}
nodeNative15, _ := jsonpath.Get("$[0].local_bgp_ip", v)
if nodeNative15 != nil && nodeNative15 != "" {
objectDataLocalMap2["LocalBgpIp"] = nodeNative15
}
nodeNative16, _ := jsonpath.Get("$[0].local_asn", v)
if nodeNative16 != nil && nodeNative16 != "" {
objectDataLocalMap2["LocalAsn"] = nodeNative16
}
objectDataLocalMap2Json, err := json.Marshal(objectDataLocalMap2)
if err != nil {
return WrapError(err)
}
request["BgpConfig"] = string(objectDataLocalMap2Json)
}
}
if !d.IsNewResource() && d.HasChange("tunnel_options_specification") {
update = true
if v, ok := d.GetOk("tunnel_options_specification"); ok {
tunnelOptionsSpecificationMaps := make([]map[string]interface{}, 0)
for _, dataLoop := range v.([]interface{}) {
dataLoopTmp := dataLoop.(map[string]interface{})
dataLoopMap := make(map[string]interface{})
dataLoopMap["EnableDpd"] = dataLoopTmp["enable_dpd"]
dataLoopMap["EnableNatTraversal"] = dataLoopTmp["enable_nat_traversal"]
if !IsNil(dataLoopTmp["tunnel_bgp_config"]) {
localData1 := make(map[string]interface{})
nodeNative19, _ := jsonpath.Get("$.tunnel_bgp_config[0].local_asn", dataLoopTmp)
if nodeNative19 != nil && nodeNative19 != "" {
localData1["LocalAsn"] = nodeNative19
}
nodeNative20, _ := jsonpath.Get("$.tunnel_bgp_config[0].local_bgp_ip", dataLoopTmp)
if nodeNative20 != nil && nodeNative20 != "" {
localData1["LocalBgpIp"] = nodeNative20
}
nodeNative21, _ := jsonpath.Get("$.tunnel_bgp_config[0].tunnel_cidr", dataLoopTmp)
if nodeNative21 != nil && nodeNative21 != "" {
localData1["TunnelCidr"] = nodeNative21
}
dataLoopMap["TunnelBgpConfig"] = localData1
}
if !IsNil(dataLoopTmp["tunnel_ike_config"]) {
localData2 := make(map[string]interface{})
nodeNative22, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_auth_alg", dataLoopTmp)
if nodeNative22 != nil && nodeNative22 != "" {
localData2["IkeAuthAlg"] = nodeNative22
}
nodeNative23, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_enc_alg", dataLoopTmp)
if nodeNative23 != nil && nodeNative23 != "" {
localData2["IkeEncAlg"] = nodeNative23
}
nodeNative24, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_lifetime", dataLoopTmp)
if nodeNative24 != nil && nodeNative24 != "" {
localData2["IkeLifetime"] = nodeNative24
}
nodeNative25, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_mode", dataLoopTmp)
if nodeNative25 != nil && nodeNative25 != "" {
localData2["IkeMode"] = nodeNative25
}
nodeNative26, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_pfs", dataLoopTmp)
if nodeNative26 != nil && nodeNative26 != "" {
localData2["IkePfs"] = nodeNative26
}
nodeNative27, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_version", dataLoopTmp)
if nodeNative27 != nil && nodeNative27 != "" {
localData2["IkeVersion"] = nodeNative27
}
nodeNative28, _ := jsonpath.Get("$.tunnel_ike_config[0].local_id", dataLoopTmp)
if nodeNative28 != nil && nodeNative28 != "" {
localData2["LocalId"] = nodeNative28
}
nodeNative29, _ := jsonpath.Get("$.tunnel_ike_config[0].psk", dataLoopTmp)
if nodeNative29 != nil && nodeNative29 != "" {
localData2["Psk"] = nodeNative29
}
nodeNative30, _ := jsonpath.Get("$.tunnel_ike_config[0].remote_id", dataLoopTmp)
if nodeNative30 != nil && nodeNative30 != "" {
localData2["RemoteId"] = nodeNative30
}
dataLoopMap["TunnelIkeConfig"] = localData2
}
if !IsNil(dataLoopTmp["tunnel_ipsec_config"]) {
localData3 := make(map[string]interface{})
nodeNative31, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_auth_alg", dataLoopTmp)
if nodeNative31 != nil && nodeNative31 != "" {
localData3["IpsecAuthAlg"] = nodeNative31
}
nodeNative32, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_enc_alg", dataLoopTmp)
if nodeNative32 != nil && nodeNative32 != "" {
localData3["IpsecEncAlg"] = nodeNative32
}
nodeNative33, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_lifetime", dataLoopTmp)
if nodeNative33 != nil && nodeNative33 != "" {
localData3["IpsecLifetime"] = nodeNative33
}
nodeNative34, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_pfs", dataLoopTmp)
if nodeNative34 != nil && nodeNative34 != "" {
localData3["IpsecPfs"] = nodeNative34
}
dataLoopMap["TunnelIpsecConfig"] = localData3
}
dataLoopMap["Role"] = dataLoopTmp["role"]
tunnelOptionsSpecificationMaps = append(tunnelOptionsSpecificationMaps, dataLoopMap)
}
request["TunnelOptionsSpecification"] = tunnelOptionsSpecificationMaps
}
}
if d.HasChange("health_check_config") {
update = true
objectDataLocalMap3 := make(map[string]interface{})
if v := d.Get("health_check_config"); v != nil {
nodeNative36, _ := jsonpath.Get("$[0].enable", v)
if nodeNative36 != nil && nodeNative36 != "" {
objectDataLocalMap3["Enable"] = nodeNative36
}
nodeNative37, _ := jsonpath.Get("$[0].dip", v)
if nodeNative37 != nil && nodeNative37 != "" {
objectDataLocalMap3["Dip"] = nodeNative37
}
nodeNative38, _ := jsonpath.Get("$[0].sip", v)
if nodeNative38 != nil && nodeNative38 != "" {
objectDataLocalMap3["Sip"] = nodeNative38
}
nodeNative39, _ := jsonpath.Get("$[0].interval", v)
if nodeNative39 != nil && nodeNative39 != "" {
objectDataLocalMap3["Interval"] = nodeNative39
}
nodeNative40, _ := jsonpath.Get("$[0].retry", v)
if nodeNative40 != nil && nodeNative40 != "" {
objectDataLocalMap3["Retry"] = nodeNative40
}
objectDataLocalMap3Json, err := json.Marshal(objectDataLocalMap3)
if err != nil {
return WrapError(err)
}
request["HealthCheckConfig"] = string(objectDataLocalMap3Json)
}
}
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)
request["ClientToken"] = buildClientToken(action)
if err != nil {
if IsExpectedErrors(err, []string{"VpnGateway.Configuring", "VpnTask.CONFLICT"}) || 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)
}
vPNGatewayServiceV2 := VPNGatewayServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 10*time.Second, vPNGatewayServiceV2.VPNGatewayVpnConnectionStateRefreshFunc(d.Id(), "State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
if d.HasChange("tags") {
vPNGatewayServiceV2 := VPNGatewayServiceV2{client}
if err := vPNGatewayServiceV2.SetResourceTags(d, "VPNCONNECTION"); err != nil {
return WrapError(err)
}
}
return resourceAliCloudVPNGatewayVpnConnectionRead(d, meta)
}