in alicloud/resource_alicloud_vpn_gateway_vpn_attachment.go [448:717]
func resourceAliCloudVpnGatewayVpnAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
action := "CreateVpnAttachment"
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
request["ClientToken"] = buildClientToken(action)
if v, ok := d.GetOk("network_type"); ok {
request["NetworkType"] = v
}
request["LocalSubnet"] = d.Get("local_subnet")
request["RemoteSubnet"] = d.Get("remote_subnet")
if v, ok := d.GetOkExists("effect_immediately"); ok {
request["EffectImmediately"] = v
}
if v, ok := d.GetOkExists("enable_dpd"); ok {
request["EnableDpd"] = v
}
if v, ok := d.GetOkExists("enable_nat_traversal"); ok {
request["EnableNatTraversal"] = v
}
if v, ok := d.GetOk("vpn_attachment_name"); ok {
request["Name"] = v
}
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("ike_config"); !IsNil(v) {
psk1, _ := jsonpath.Get("$[0].psk", v)
if psk1 != nil && psk1 != "" {
objectDataLocalMap["Psk"] = psk1
}
ikeVersion1, _ := jsonpath.Get("$[0].ike_version", v)
if ikeVersion1 != nil && ikeVersion1 != "" {
objectDataLocalMap["IkeVersion"] = ikeVersion1
}
ikeMode1, _ := jsonpath.Get("$[0].ike_mode", v)
if ikeMode1 != nil && ikeMode1 != "" {
objectDataLocalMap["IkeMode"] = ikeMode1
}
ikeEncAlg1, _ := jsonpath.Get("$[0].ike_enc_alg", v)
if ikeEncAlg1 != nil && ikeEncAlg1 != "" {
objectDataLocalMap["IkeEncAlg"] = ikeEncAlg1
}
ikeAuthAlg1, _ := jsonpath.Get("$[0].ike_auth_alg", v)
if ikeAuthAlg1 != nil && ikeAuthAlg1 != "" {
objectDataLocalMap["IkeAuthAlg"] = ikeAuthAlg1
}
ikePfs1, _ := jsonpath.Get("$[0].ike_pfs", v)
if ikePfs1 != nil && ikePfs1 != "" {
objectDataLocalMap["IkePfs"] = ikePfs1
}
ikeLifetime1, _ := jsonpath.Get("$[0].ike_lifetime", v)
if ikeLifetime1 != nil && ikeLifetime1 != "" {
objectDataLocalMap["IkeLifetime"] = ikeLifetime1
}
remoteId1, _ := jsonpath.Get("$[0].remote_id", v)
if remoteId1 != nil && remoteId1 != "" {
objectDataLocalMap["RemoteId"] = remoteId1
}
localId1, _ := jsonpath.Get("$[0].local_id", v)
if localId1 != nil && localId1 != "" {
objectDataLocalMap["LocalId"] = localId1
}
request["IkeConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap)
}
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("ipsec_config"); !IsNil(v) {
ipsecEncAlg1, _ := jsonpath.Get("$[0].ipsec_enc_alg", v)
if ipsecEncAlg1 != nil && ipsecEncAlg1 != "" {
objectDataLocalMap1["IpsecEncAlg"] = ipsecEncAlg1
}
ipsecAuthAlg1, _ := jsonpath.Get("$[0].ipsec_auth_alg", v)
if ipsecAuthAlg1 != nil && ipsecAuthAlg1 != "" {
objectDataLocalMap1["IpsecAuthAlg"] = ipsecAuthAlg1
}
ipsecPfs1, _ := jsonpath.Get("$[0].ipsec_pfs", v)
if ipsecPfs1 != nil && ipsecPfs1 != "" {
objectDataLocalMap1["IpsecPfs"] = ipsecPfs1
}
ipsecLifetime1, _ := jsonpath.Get("$[0].ipsec_lifetime", v)
if ipsecLifetime1 != nil && ipsecLifetime1 != "" {
objectDataLocalMap1["IpsecLifetime"] = ipsecLifetime1
}
request["IpsecConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap1)
}
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("bgp_config"); !IsNil(v) {
localAsn1, _ := jsonpath.Get("$[0].local_asn", v)
if localAsn1 != nil && localAsn1 != "" {
objectDataLocalMap2["LocalAsn"] = localAsn1
}
tunnelCidr1, _ := jsonpath.Get("$[0].tunnel_cidr", v)
if tunnelCidr1 != nil && tunnelCidr1 != "" {
objectDataLocalMap2["TunnelCidr"] = tunnelCidr1
}
localBgpIp1, _ := jsonpath.Get("$[0].local_bgp_ip", v)
if localBgpIp1 != nil && localBgpIp1 != "" {
objectDataLocalMap2["LocalBgpIp"] = localBgpIp1
}
enable, _ := jsonpath.Get("$[0].enable", v)
if enable != nil && enable != "" {
objectDataLocalMap2["EnableBgp"] = enable
}
request["BgpConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap2)
}
if v, ok := d.GetOk("customer_gateway_id"); ok {
request["CustomerGatewayId"] = v
}
if v, ok := d.GetOk("tags"); ok {
tagsMap := ConvertTags(v.(map[string]interface{}))
request = expandTagsToMap(request, tagsMap)
}
if v, ok := d.GetOk("resource_group_id"); ok {
request["ResourceGroupId"] = v
}
if v, ok := d.GetOkExists("enable_tunnels_bgp"); ok {
request["EnableTunnelsBgp"] = v
}
if v, ok := d.GetOk("tunnel_options_specification"); ok {
tunnelOptionsSpecificationMapsArray := make([]interface{}, 0)
for _, dataLoop1 := range v.(*schema.Set).List() {
dataLoop1Tmp := dataLoop1.(map[string]interface{})
dataLoop1Map := make(map[string]interface{})
dataLoop1Map["CustomerGatewayId"] = dataLoop1Tmp["customer_gateway_id"]
dataLoop1Map["EnableDpd"] = dataLoop1Tmp["enable_dpd"]
dataLoop1Map["EnableNatTraversal"] = dataLoop1Tmp["enable_nat_traversal"]
dataLoop1Map["TunnelIndex"] = dataLoop1Tmp["tunnel_index"]
localData2 := make(map[string]interface{})
localAsn3, _ := jsonpath.Get("$[0].local_asn", dataLoop1Tmp["tunnel_bgp_config"])
if localAsn3 != nil && localAsn3 != "" {
localData2["LocalAsn"] = localAsn3
}
localBgpIp3, _ := jsonpath.Get("$[0].local_bgp_ip", dataLoop1Tmp["tunnel_bgp_config"])
if localBgpIp3 != nil && localBgpIp3 != "" {
localData2["LocalBgpIp"] = localBgpIp3
}
tunnelCidr3, _ := jsonpath.Get("$[0].tunnel_cidr", dataLoop1Tmp["tunnel_bgp_config"])
if tunnelCidr3 != nil && tunnelCidr3 != "" {
localData2["TunnelCidr"] = tunnelCidr3
}
dataLoop1Map["TunnelBgpConfig"] = localData2
localData3 := make(map[string]interface{})
ikeAuthAlg3, _ := jsonpath.Get("$[0].ike_auth_alg", dataLoop1Tmp["tunnel_ike_config"])
if ikeAuthAlg3 != nil && ikeAuthAlg3 != "" {
localData3["IkeAuthAlg"] = ikeAuthAlg3
}
ikeEncAlg3, _ := jsonpath.Get("$[0].ike_enc_alg", dataLoop1Tmp["tunnel_ike_config"])
if ikeEncAlg3 != nil && ikeEncAlg3 != "" {
localData3["IkeEncAlg"] = ikeEncAlg3
}
ikeLifetime3, _ := jsonpath.Get("$[0].ike_lifetime", dataLoop1Tmp["tunnel_ike_config"])
if ikeLifetime3 != nil && ikeLifetime3 != "" {
localData3["IkeLifetime"] = ikeLifetime3
}
ikeMode3, _ := jsonpath.Get("$[0].ike_mode", dataLoop1Tmp["tunnel_ike_config"])
if ikeMode3 != nil && ikeMode3 != "" {
localData3["IkeMode"] = ikeMode3
}
ikePfs3, _ := jsonpath.Get("$[0].ike_pfs", dataLoop1Tmp["tunnel_ike_config"])
if ikePfs3 != nil && ikePfs3 != "" {
localData3["IkePfs"] = ikePfs3
}
ikeVersion3, _ := jsonpath.Get("$[0].ike_version", dataLoop1Tmp["tunnel_ike_config"])
if ikeVersion3 != nil && ikeVersion3 != "" {
localData3["IkeVersion"] = ikeVersion3
}
localId3, _ := jsonpath.Get("$[0].local_id", dataLoop1Tmp["tunnel_ike_config"])
if localId3 != nil && localId3 != "" {
localData3["LocalId"] = localId3
}
psk3, _ := jsonpath.Get("$[0].psk", dataLoop1Tmp["tunnel_ike_config"])
if psk3 != nil && psk3 != "" {
localData3["Psk"] = psk3
}
remoteId3, _ := jsonpath.Get("$[0].remote_id", dataLoop1Tmp["tunnel_ike_config"])
if remoteId3 != nil && remoteId3 != "" {
localData3["RemoteId"] = remoteId3
}
dataLoop1Map["TunnelIkeConfig"] = localData3
localData4 := make(map[string]interface{})
ipsecAuthAlg3, _ := jsonpath.Get("$[0].ipsec_auth_alg", dataLoop1Tmp["tunnel_ipsec_config"])
if ipsecAuthAlg3 != nil && ipsecAuthAlg3 != "" {
localData4["IpsecAuthAlg"] = ipsecAuthAlg3
}
ipsecEncAlg3, _ := jsonpath.Get("$[0].ipsec_enc_alg", dataLoop1Tmp["tunnel_ipsec_config"])
if ipsecEncAlg3 != nil && ipsecEncAlg3 != "" {
localData4["IpsecEncAlg"] = ipsecEncAlg3
}
ipsecLifetime3, _ := jsonpath.Get("$[0].ipsec_lifetime", dataLoop1Tmp["tunnel_ipsec_config"])
if ipsecLifetime3 != nil && ipsecLifetime3 != "" {
localData4["IpsecLifetime"] = ipsecLifetime3
}
ipsecPfs3, _ := jsonpath.Get("$[0].ipsec_pfs", dataLoop1Tmp["tunnel_ipsec_config"])
if ipsecPfs3 != nil && ipsecPfs3 != "" {
localData4["IpsecPfs"] = ipsecPfs3
}
dataLoop1Map["TunnelIpsecConfig"] = localData4
tunnelOptionsSpecificationMapsArray = append(tunnelOptionsSpecificationMapsArray, dataLoop1Map)
}
request["TunnelOptionsSpecification"] = tunnelOptionsSpecificationMapsArray
}
objectDataLocalMap3 := make(map[string]interface{})
if v := d.Get("health_check_config"); !IsNil(v) {
enable2, _ := jsonpath.Get("$[0].enable", v)
if enable2 != nil && enable2 != "" {
objectDataLocalMap3["enable"] = enable2
}
dip1, _ := jsonpath.Get("$[0].dip", v)
if dip1 != nil && dip1 != "" {
objectDataLocalMap3["dip"] = dip1
}
sip1, _ := jsonpath.Get("$[0].sip", v)
if sip1 != nil && sip1 != "" {
objectDataLocalMap3["sip"] = sip1
}
interval1, _ := jsonpath.Get("$[0].interval", v)
if interval1 != nil && interval1 != "" {
objectDataLocalMap3["interval"] = interval1
}
retry1, _ := jsonpath.Get("$[0].retry", v)
if retry1 != nil && retry1 != "" {
objectDataLocalMap3["retry"] = retry1
}
policy1, _ := jsonpath.Get("$[0].policy", v)
if policy1 != nil && policy1 != "" {
objectDataLocalMap3["Policy"] = policy1
}
request["HealthCheckConfig"] = convertMapToJsonStringIgnoreError(objectDataLocalMap3)
}
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"Appliance.Configuring", "VpnGateway.Configuring", "VpnTask.CONFLICT", "TaskConflict"}) || 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_vpn_gateway_vpn_attachment", action, AlibabaCloudSdkGoERROR)
}
d.SetId(fmt.Sprint(response["VpnConnectionId"]))
return resourceAliCloudVpnGatewayVpnAttachmentUpdate(d, meta)
}