in alicloud/resource_alicloud_vpn_connection.go [423:721]
func resourceAliCloudVPNGatewayVpnConnectionCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
action := "CreateVpnConnection"
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("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 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
}
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("ike_config"); !IsNil(v) {
nodeNative, _ := jsonpath.Get("$[0].psk", d.Get("ike_config"))
if nodeNative != nil && nodeNative != "" {
objectDataLocalMap["Psk"] = nodeNative
}
nodeNative1, _ := jsonpath.Get("$[0].ike_version", d.Get("ike_config"))
if nodeNative1 != nil && nodeNative1 != "" {
objectDataLocalMap["IkeVersion"] = nodeNative1
}
nodeNative2, _ := jsonpath.Get("$[0].ike_mode", d.Get("ike_config"))
if nodeNative2 != nil && nodeNative2 != "" {
objectDataLocalMap["IkeMode"] = nodeNative2
}
nodeNative3, _ := jsonpath.Get("$[0].ike_enc_alg", d.Get("ike_config"))
if nodeNative3 != nil && nodeNative3 != "" {
objectDataLocalMap["IkeEncAlg"] = nodeNative3
}
nodeNative4, _ := jsonpath.Get("$[0].ike_auth_alg", d.Get("ike_config"))
if nodeNative4 != nil && nodeNative4 != "" {
objectDataLocalMap["IkeAuthAlg"] = nodeNative4
}
nodeNative5, _ := jsonpath.Get("$[0].ike_pfs", d.Get("ike_config"))
if nodeNative5 != nil && nodeNative5 != "" {
objectDataLocalMap["IkePfs"] = nodeNative5
}
nodeNative6, _ := jsonpath.Get("$[0].ike_lifetime", d.Get("ike_config"))
if nodeNative6 != nil && nodeNative6 != "" {
objectDataLocalMap["IkeLifetime"] = nodeNative6
}
nodeNative7, _ := jsonpath.Get("$[0].ike_local_id", d.Get("ike_config"))
if nodeNative7 != nil && nodeNative7 != "" {
objectDataLocalMap["LocalId"] = nodeNative7
}
nodeNative8, _ := jsonpath.Get("$[0].ike_remote_id", d.Get("ike_config"))
if nodeNative8 != nil && nodeNative8 != "" {
objectDataLocalMap["RemoteId"] = nodeNative8
}
objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap)
if err != nil {
return WrapError(err)
}
request["IkeConfig"] = string(objectDataLocalMapJson)
}
objectDataLocalMap1 := make(map[string]interface{})
if v := d.Get("ipsec_config"); !IsNil(v) {
nodeNative9, _ := jsonpath.Get("$[0].ipsec_enc_alg", d.Get("ipsec_config"))
if nodeNative9 != nil && nodeNative9 != "" {
objectDataLocalMap1["IpsecEncAlg"] = nodeNative9
}
nodeNative10, _ := jsonpath.Get("$[0].ipsec_auth_alg", d.Get("ipsec_config"))
if nodeNative10 != nil && nodeNative10 != "" {
objectDataLocalMap1["IpsecAuthAlg"] = nodeNative10
}
nodeNative11, _ := jsonpath.Get("$[0].ipsec_pfs", d.Get("ipsec_config"))
if nodeNative11 != nil && nodeNative11 != "" {
objectDataLocalMap1["IpsecPfs"] = nodeNative11
}
nodeNative12, _ := jsonpath.Get("$[0].ipsec_lifetime", d.Get("ipsec_config"))
if nodeNative12 != nil && nodeNative12 != "" {
objectDataLocalMap1["IpsecLifetime"] = nodeNative12
}
objectDataLocalMap1Json, err := json.Marshal(objectDataLocalMap1)
if err != nil {
return WrapError(err)
}
request["IpsecConfig"] = string(objectDataLocalMap1Json)
}
objectDataLocalMap2 := make(map[string]interface{})
if v := d.Get("bgp_config"); !IsNil(v) {
nodeNative13, _ := jsonpath.Get("$[0].local_asn", d.Get("bgp_config"))
if nodeNative13 != nil && nodeNative13 != "" {
objectDataLocalMap2["LocalAsn"] = nodeNative13
}
nodeNative14, _ := jsonpath.Get("$[0].tunnel_cidr", d.Get("bgp_config"))
if nodeNative14 != nil && nodeNative14 != "" {
objectDataLocalMap2["TunnelCidr"] = nodeNative14
}
nodeNative15, _ := jsonpath.Get("$[0].local_bgp_ip", d.Get("bgp_config"))
if nodeNative15 != nil && nodeNative15 != "" {
objectDataLocalMap2["LocalBgpIp"] = nodeNative15
}
nodeNative16, _ := jsonpath.Get("$[0].enable", d.Get("bgp_config"))
if nodeNative16 != nil && nodeNative16 != "" {
objectDataLocalMap2["EnableBgp"] = nodeNative16
}
objectDataLocalMap2Json, err := json.Marshal(objectDataLocalMap2)
if err != nil {
return WrapError(err)
}
request["BgpConfig"] = string(objectDataLocalMap2Json)
}
if v, ok := d.GetOk("customer_gateway_id"); ok {
request["CustomerGatewayId"] = v
}
if v, ok := d.GetOkExists("auto_config_route"); ok {
request["AutoConfigRoute"] = v
}
if v, ok := d.GetOk("name"); ok {
request["Name"] = v
}
if v, ok := d.GetOk("vpn_connection_name"); ok {
request["Name"] = v
}
request["VpnGatewayId"] = d.Get("vpn_gateway_id")
if v, ok := d.GetOk("tags"); ok {
tagsMap := ConvertTags(v.(map[string]interface{}))
request["Tags"] = tagsMap
}
if v, ok := d.GetOk("tunnel_options_specification"); ok {
tunnelOptionsSpecificationMaps := make([]map[string]interface{}, 0)
for _, dataLoop1 := range v.([]interface{}) {
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["Role"] = dataLoop1Tmp["role"]
if !IsNil(dataLoop1Tmp["tunnel_bgp_config"]) {
localData2 := make(map[string]interface{})
nodeNative23, _ := jsonpath.Get("$.tunnel_bgp_config[0].local_asn", dataLoop1Tmp)
if nodeNative23 != nil && nodeNative23 != "" {
localData2["LocalAsn"] = nodeNative23
}
nodeNative24, _ := jsonpath.Get("$.tunnel_bgp_config[0].local_bgp_ip", dataLoop1Tmp)
if nodeNative24 != nil && nodeNative24 != "" {
localData2["LocalBgpIp"] = nodeNative24
}
nodeNative25, _ := jsonpath.Get("$.tunnel_bgp_config[0].tunnel_cidr", dataLoop1Tmp)
if nodeNative25 != nil && nodeNative25 != "" {
localData2["TunnelCidr"] = nodeNative25
}
dataLoop1Map["TunnelBgpConfig"] = localData2
}
if !IsNil(dataLoop1Tmp["tunnel_ike_config"]) {
localData3 := make(map[string]interface{})
nodeNative26, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_auth_alg", dataLoop1Tmp)
if nodeNative26 != nil && nodeNative26 != "" {
localData3["IkeAuthAlg"] = nodeNative26
}
nodeNative27, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_enc_alg", dataLoop1Tmp)
if nodeNative27 != nil && nodeNative27 != "" {
localData3["IkeEncAlg"] = nodeNative27
}
nodeNative28, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_lifetime", dataLoop1Tmp)
if nodeNative28 != nil && nodeNative28 != "" {
localData3["IkeLifetime"] = nodeNative28
}
nodeNative29, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_mode", dataLoop1Tmp)
if nodeNative29 != nil && nodeNative29 != "" {
localData3["IkeMode"] = nodeNative29
}
nodeNative30, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_pfs", dataLoop1Tmp)
if nodeNative30 != nil && nodeNative30 != "" {
localData3["IkePfs"] = nodeNative30
}
nodeNative31, _ := jsonpath.Get("$.tunnel_ike_config[0].ike_version", dataLoop1Tmp)
if nodeNative31 != nil && nodeNative31 != "" {
localData3["IkeVersion"] = nodeNative31
}
nodeNative32, _ := jsonpath.Get("$.tunnel_ike_config[0].local_id", dataLoop1Tmp)
if nodeNative32 != nil && nodeNative32 != "" {
localData3["LocalId"] = nodeNative32
}
nodeNative33, _ := jsonpath.Get("$.tunnel_ike_config[0].psk", dataLoop1Tmp)
if nodeNative33 != nil && nodeNative33 != "" {
localData3["Psk"] = nodeNative33
}
nodeNative34, _ := jsonpath.Get("$.tunnel_ike_config[0].remote_id", dataLoop1Tmp)
if nodeNative34 != nil && nodeNative34 != "" {
localData3["RemoteId"] = nodeNative34
}
dataLoop1Map["TunnelIkeConfig"] = localData3
}
if !IsNil(dataLoop1Tmp["tunnel_ipsec_config"]) {
localData4 := make(map[string]interface{})
nodeNative35, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_auth_alg", dataLoop1Tmp)
if nodeNative35 != nil && nodeNative35 != "" {
localData4["IpsecAuthAlg"] = nodeNative35
}
nodeNative36, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_enc_alg", dataLoop1Tmp)
if nodeNative36 != nil && nodeNative36 != "" {
localData4["IpsecEncAlg"] = nodeNative36
}
nodeNative37, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_lifetime", dataLoop1Tmp)
if nodeNative37 != nil && nodeNative37 != "" {
localData4["IpsecLifetime"] = nodeNative37
}
nodeNative38, _ := jsonpath.Get("$.tunnel_ipsec_config[0].ipsec_pfs", dataLoop1Tmp)
if nodeNative38 != nil && nodeNative38 != "" {
localData4["IpsecPfs"] = nodeNative38
}
dataLoop1Map["TunnelIpsecConfig"] = localData4
}
tunnelOptionsSpecificationMaps = append(tunnelOptionsSpecificationMaps, dataLoop1Map)
}
request["TunnelOptionsSpecification"] = tunnelOptionsSpecificationMaps
}
if v, ok := d.GetOkExists("enable_tunnels_bgp"); ok {
request["EnableTunnelsBgp"] = v
}
objectDataLocalMap3 := make(map[string]interface{})
if v := d.Get("health_check_config"); !IsNil(v) {
nodeNative39, _ := jsonpath.Get("$[0].enable", d.Get("health_check_config"))
if nodeNative39 != nil && nodeNative39 != "" {
objectDataLocalMap3["enable"] = nodeNative39
}
nodeNative40, _ := jsonpath.Get("$[0].dip", d.Get("health_check_config"))
if nodeNative40 != nil && nodeNative40 != "" {
objectDataLocalMap3["dip"] = nodeNative40
}
nodeNative41, _ := jsonpath.Get("$[0].sip", d.Get("health_check_config"))
if nodeNative41 != nil && nodeNative41 != "" {
objectDataLocalMap3["sip"] = nodeNative41
}
nodeNative42, _ := jsonpath.Get("$[0].interval", d.Get("health_check_config"))
if nodeNative42 != nil && nodeNative42 != "" {
objectDataLocalMap3["interval"] = nodeNative42
}
nodeNative43, _ := jsonpath.Get("$[0].retry", d.Get("health_check_config"))
if nodeNative43 != nil && nodeNative43 != "" {
objectDataLocalMap3["retry"] = nodeNative43
}
objectDataLocalMap3Json, err := json.Marshal(objectDataLocalMap3)
if err != nil {
return WrapError(err)
}
request["HealthCheckConfig"] = string(objectDataLocalMap3Json)
}
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)
request["ClientToken"] = buildClientToken(action)
if err != nil {
if IsExpectedErrors(err, []string{"Appliance.Configuring", "VpnGateway.Configuring", "VpnTask.CONFLICT", "VpnConnection.Configuring"}) || NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_vpn_connection", action, AlibabaCloudSdkGoERROR)
}
d.SetId(fmt.Sprint(response["VpnConnectionId"]))
vPNGatewayServiceV2 := VPNGatewayServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"active"}, d.Timeout(schema.TimeoutCreate), 10*time.Second, vPNGatewayServiceV2.VPNGatewayVpnConnectionStateRefreshFunc(d.Id(), "State", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
return resourceAliCloudVPNGatewayVpnConnectionUpdate(d, meta)
}