From da72cd8a1adad306bb30ae08af9d20f0e7ed4783 Mon Sep 17 00:00:00 2001 From: zhiqiangjin Date: Tue, 2 Nov 2021 15:40:33 -0700 Subject: [PATCH] AVX-16085: Add support of scale s2c netmap cidrs --- aviatrix/resource_aviatrix_site2cloud.go | 72 +++++---- goaviatrix/site2cloud.go | 197 ++++++++++++++--------- 2 files changed, 162 insertions(+), 107 deletions(-) diff --git a/aviatrix/resource_aviatrix_site2cloud.go b/aviatrix/resource_aviatrix_site2cloud.go index 6c4f9e21b..ccb419e58 100644 --- a/aviatrix/resource_aviatrix_site2cloud.go +++ b/aviatrix/resource_aviatrix_site2cloud.go @@ -276,52 +276,60 @@ func resourceAviatrixSite2Cloud() *schema.Resource { Description: "Enable single IP HA on a site2cloud connection.", }, "remote_source_real_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Remote Initiated Traffic Source Real CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncRemoteSourceRealCIDRs, + Description: "Remote Initiated Traffic Source Real CIDRs.", }, "remote_source_virtual_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Remote Initiated Traffic Source Virtual CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncRemoteSourceVirtualCIDRs, + Description: "Remote Initiated Traffic Source Virtual CIDRs.", }, "remote_destination_real_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Remote Initiated Traffic Destination Real CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncRemoteDestinationRealCIDRs, + Description: "Remote Initiated Traffic Destination Real CIDRs.", }, "remote_destination_virtual_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Remote Initiated Traffic Destination Virtual CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncRemoteDestinationVirtualCIDRs, + Description: "Remote Initiated Traffic Destination Virtual CIDRs.", }, "local_source_real_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Local Initiated Traffic Source Real CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncLocalSourceRealCIDRs, + Description: "Local Initiated Traffic Source Real CIDRs.", }, "local_source_virtual_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Local Initiated Traffic Source Virtual CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncLocalSourceVirtualCIDRs, + Description: "Local Initiated Traffic Source Virtual CIDRs.", }, "local_destination_real_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Local Initiated Traffic Destination Real CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncLocalDestinationRealCIDRs, + Description: "Local Initiated Traffic Destination Real CIDRs.", }, "local_destination_virtual_cidrs": { - Type: schema.TypeList, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, - Description: "Local Initiated Traffic Destination Virtual CIDRs.", + Type: schema.TypeList, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsCIDR}, + DiffSuppressFunc: goaviatrix.DiffSuppressFuncLocalDestinationVirtualCIDRs, + Description: "Local Initiated Traffic Destination Virtual CIDRs.", }, "enable_event_triggered_ha": { Type: schema.TypeBool, diff --git a/goaviatrix/site2cloud.go b/goaviatrix/site2cloud.go index 93648d3fb..c6519ed2e 100644 --- a/goaviatrix/site2cloud.go +++ b/goaviatrix/site2cloud.go @@ -1,11 +1,7 @@ package goaviatrix import ( - "bytes" - "encoding/json" - "errors" "fmt" - "net/url" "strconv" "strings" @@ -186,105 +182,85 @@ type AlgorithmInfo struct { } func (c *Client) CreateSite2Cloud(site2cloud *Site2Cloud) error { - // TODO: use PostAPI - long form - Url, err := url.Parse(c.baseURL) - if err != nil { - return errors.New("url Parsing failed for add_site2cloud " + err.Error()) - } - addSite2cloud := url.Values{} - addSite2cloud.Add("CID", c.CID) - addSite2cloud.Add("action", "add_site2cloud") - addSite2cloud.Add("vpc_id", site2cloud.VpcID) - addSite2cloud.Add("connection_name", site2cloud.TunnelName) - addSite2cloud.Add("connection_type", site2cloud.ConnType) - addSite2cloud.Add("remote_gateway_type", site2cloud.RemoteGwType) - addSite2cloud.Add("tunnel_type", site2cloud.TunnelType) - - addSite2cloud.Add("ha_enabled", site2cloud.HAEnabled) - addSite2cloud.Add("backup_gateway_name", site2cloud.BackupGwName) - addSite2cloud.Add("backup_remote_gateway_ip", site2cloud.RemoteGwIP2) - - addSite2cloud.Add("phase1_auth", site2cloud.Phase1Auth) - addSite2cloud.Add("phase1_dh_group", site2cloud.Phase1DhGroups) - addSite2cloud.Add("phase1_encryption", site2cloud.Phase1Encryption) - addSite2cloud.Add("phase2_auth", site2cloud.Phase2Auth) - addSite2cloud.Add("phase2_dh_group", site2cloud.Phase2DhGroups) - addSite2cloud.Add("phase2_encryption", site2cloud.Phase2Encryption) + form := map[string]string{} + form["CID"] = c.CID + form["CID"] = c.CID + form["action"] = "add_site2cloud" + form["vpc_id"] = site2cloud.VpcID + form["connection_name"] = site2cloud.TunnelName + form["connection_type"] = site2cloud.ConnType + form["remote_gateway_type"] = site2cloud.RemoteGwType + form["tunnel_type"] = site2cloud.TunnelType + + form["ha_enabled"] = site2cloud.HAEnabled + form["backup_gateway_name"] = site2cloud.BackupGwName + form["backup_remote_gateway_ip"] = site2cloud.RemoteGwIP2 + + form["phase1_auth"] = site2cloud.Phase1Auth + form["phase1_dh_group"] = site2cloud.Phase1DhGroups + form["phase1_encryption"] = site2cloud.Phase1Encryption + form["phase2_auth"] = site2cloud.Phase2Auth + form["phase2_dh_group"] = site2cloud.Phase2DhGroups + form["phase2_encryption"] = site2cloud.Phase2Encryption if site2cloud.TunnelType == "tcp" { - addSite2cloud.Add("ssl_server_pool", site2cloud.SslServerPool) + form["ssl_server_pool"] = site2cloud.SslServerPool } if site2cloud.EnableIKEv2 == "true" { - addSite2cloud.Add("enable_ikev2", "true") + form["enable_ikev2"] = "true" } if site2cloud.PrivateRouteEncryption == "true" { - addSite2cloud.Add("private_route_encryption", site2cloud.PrivateRouteEncryption) + form["private_route_encryption"] = site2cloud.PrivateRouteEncryption if len(site2cloud.RouteTableList) != 0 { for i := range site2cloud.RouteTableList { - addSite2cloud.Add("route_table_list["+strconv.Itoa(i)+"]", site2cloud.RouteTableList[i]) + form["route_table_list["+strconv.Itoa(i)+"]"] = site2cloud.RouteTableList[i] } } latitude := fmt.Sprintf("%f", site2cloud.RemoteGwLatitude) longitude := fmt.Sprintf("%f", site2cloud.RemoteGwLongitude) - addSite2cloud.Add("remote_gateway_latitude", latitude) - addSite2cloud.Add("remote_gateway_longitude", longitude) + form["remote_gateway_latitude"] = latitude + form["remote_gateway_longitude"] = longitude if site2cloud.HAEnabled == "yes" { backupLatitude := fmt.Sprintf("%f", site2cloud.BackupRemoteGwLatitude) backupLongitude := fmt.Sprintf("%f", site2cloud.BackupRemoteGwLongitude) - addSite2cloud.Add("remote_gateway_latitude", backupLatitude) - addSite2cloud.Add("remote_gateway_longitude", backupLongitude) + form["remote_gateway_latitude"] = backupLatitude + form["remote_gateway_longitude"] = backupLongitude } } - addSite2cloud.Add("primary_cloud_gateway_name", site2cloud.GwName) - addSite2cloud.Add("remote_gateway_ip", site2cloud.RemoteGwIP) - addSite2cloud.Add("remote_subnet_cidr", site2cloud.RemoteSubnet) - addSite2cloud.Add("local_subnet_cidr", site2cloud.LocalSubnet) - addSite2cloud.Add("virtual_remote_subnet_cidr", site2cloud.RemoteSubnetVirtual) - addSite2cloud.Add("virtual_local_subnet_cidr", site2cloud.LocalSubnetVirtual) + form["primary_cloud_gateway_name"] = site2cloud.GwName + form["remote_gateway_ip"] = site2cloud.RemoteGwIP + form["remote_subnet_cidr"] = site2cloud.RemoteSubnet + form["local_subnet_cidr"] = site2cloud.LocalSubnet + form["virtual_remote_subnet_cidr"] = site2cloud.RemoteSubnetVirtual + form["virtual_local_subnet_cidr"] = site2cloud.LocalSubnetVirtual - addSite2cloud.Add("pre_shared_key", site2cloud.PreSharedKey) - addSite2cloud.Add("backup_pre_shared_key", site2cloud.BackupPreSharedKey) + form["pre_shared_key"] = site2cloud.PreSharedKey + form["backup_pre_shared_key"] = site2cloud.BackupPreSharedKey if site2cloud.CustomMap { - addSite2cloud.Add("custom_map", strconv.FormatBool(site2cloud.CustomMap)) - addSite2cloud.Add("remote_src_real_cidrs", site2cloud.RemoteSourceRealCIDRs) - addSite2cloud.Add("remote_src_virt_cidrs", site2cloud.RemoteSourceVirtualCIDRs) - addSite2cloud.Add("remote_dst_real_cidrs", site2cloud.RemoteDestinationRealCIDRs) - addSite2cloud.Add("remote_dst_virt_cidrs", site2cloud.RemoteDestinationVirtualCIDRs) - addSite2cloud.Add("local_src_real_cidrs", site2cloud.LocalSourceRealCIDRs) - addSite2cloud.Add("local_src_virt_cidrs", site2cloud.LocalSourceVirtualCIDRs) - addSite2cloud.Add("local_dst_real_cidrs", site2cloud.LocalDestinationRealCIDRs) - addSite2cloud.Add("local_dst_virt_cidrs", site2cloud.LocalDestinationVirtualCIDRs) + form["custom_map"] = strconv.FormatBool(site2cloud.CustomMap) + form["remote_src_real_cidrs"] = site2cloud.RemoteSourceRealCIDRs + form["remote_src_virt_cidrs"] = site2cloud.RemoteSourceVirtualCIDRs + form["remote_dst_real_cidrs"] = site2cloud.RemoteDestinationRealCIDRs + form["remote_dst_virt_cidrs"] = site2cloud.RemoteDestinationVirtualCIDRs + form["local_src_real_cidrs"] = site2cloud.LocalSourceRealCIDRs + form["local_src_virt_cidrs"] = site2cloud.LocalSourceVirtualCIDRs + form["local_dst_real_cidrs"] = site2cloud.LocalDestinationRealCIDRs + form["local_dst_virt_cidrs"] = site2cloud.LocalDestinationVirtualCIDRs } - addSite2cloud.Add("local_tunnel_ip", site2cloud.LocalTunnelIp) - addSite2cloud.Add("remote_tunnel_ip", site2cloud.RemoteTunnelIp) - addSite2cloud.Add("backup_local_tunnel_ip", site2cloud.BackupLocalTunnelIp) - addSite2cloud.Add("backup_remote_tunnel_ip", site2cloud.BackupRemoteTunnelIp) + form["local_tunnel_ip"] = site2cloud.LocalTunnelIp + form["remote_tunnel_ip"] = site2cloud.RemoteTunnelIp + form["backup_local_tunnel_ip"] = site2cloud.BackupLocalTunnelIp + form["backup_remote_tunnel_ip"] = site2cloud.BackupRemoteTunnelIp if site2cloud.EnableSingleIpHA { - addSite2cloud.Add("enable_single_ip_ha", "true") + form["enable_single_ip_ha"] = "true" } - Url.RawQuery = addSite2cloud.Encode() - resp, err := c.Get(Url.String(), nil) - if err != nil { - return errors.New("HTTP Get add_site2cloud failed: " + err.Error()) - } - var data APIResp - buf := new(bytes.Buffer) - buf.ReadFrom(resp.Body) - bodyString := buf.String() - bodyIoCopy := strings.NewReader(bodyString) - if err = json.NewDecoder(bodyIoCopy).Decode(&data); err != nil { - return errors.New("Json Decode add_site2cloud failed: " + err.Error() + "\n Body: " + bodyString) - } - if !data.Return { - return errors.New("Rest API add_site2cloud Get failed: " + data.Reason) - } - return nil + return c.PostAPI(form["action"], form, BasicCheck) } func (c *Client) GetSite2Cloud(site2cloud *Site2Cloud) (*Site2Cloud, error) { @@ -583,3 +559,74 @@ func S2CPh1RemoteIdDiffSuppressFunc(k, old, new string, d *schema.ResourceData) return false } + +func DiffSuppressFuncRemoteSourceRealCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("remote_source_real_cidrs") + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncRemoteSourceVirtualCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("remote_source_virtual_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncRemoteDestinationRealCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("remote_destination_real_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncRemoteDestinationVirtualCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("remote_destination_virtual_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncLocalSourceRealCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("local_source_real_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncLocalSourceVirtualCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("local_source_virtual_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncLocalDestinationRealCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("local_destination_real_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +} + +func DiffSuppressFuncLocalDestinationVirtualCIDRs(k, old, new string, d *schema.ResourceData) bool { + o, n := d.GetChange("local_destination_virtual_cidrs") + + cidrListOld := ExpandStringList(o.([]interface{})) + cidrListNew := ExpandStringList(n.([]interface{})) + + return Equivalent(cidrListOld, cidrListNew) +}