-
Notifications
You must be signed in to change notification settings - Fork 1
/
group_by_datacenter.go
81 lines (71 loc) · 2.32 KB
/
group_by_datacenter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package datacenter
import (
"net/url"
"strconv"
"strings"
"github.com/zscaler/zscaler-sdk-go/v2/zia/services/common"
)
const (
vipGroupByDatacenterEndpoint = "/vips/groupByDatacenter"
)
type DatacenterVIPS struct {
Datacenter struct {
Name string `json:"datacenter"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
City string `json:"city"`
CountryCode string `json:"countryCode"`
Region string `json:"region"`
} `json:"datacenter"`
GreVIP []GreVIP `json:"greVips"`
}
type GreVIP struct {
ID int `json:"id,omitempty"`
VirtualIp string `json:"virtualIp,omitempty"`
PrivateServiceEdge bool `json:"privateServiceEdge,omitempty"`
Datacenter string `json:"datacenter,omitempty"`
}
func (service *Service) SearchByDatacenters(params common.DatacenterSearchParameters) ([]DatacenterVIPS, error) {
var zscalerVips []DatacenterVIPS
var queryParams []string
if params.RoutableIP {
queryParams = append(queryParams, "routableIP=true")
}
if params.WithinCountryOnly {
queryParams = append(queryParams, "withinCountryOnly=true")
}
if params.IncludePrivateServiceEdge {
queryParams = append(queryParams, "includePrivateServiceEdge=true")
}
if params.IncludeCurrentVips {
queryParams = append(queryParams, "includeCurrentVips=true")
}
if params.SourceIp != "" {
queryParams = append(queryParams, "sourceIp="+url.QueryEscape(params.SourceIp))
}
if params.Latitude != 0 {
latitudeStr := strconv.FormatFloat(params.Latitude, 'f', -1, 64)
queryParams = append(queryParams, "latitude="+latitudeStr)
}
if params.Longitude != 0 {
longitudeStr := strconv.FormatFloat(params.Longitude, 'f', -1, 64)
queryParams = append(queryParams, "longitude="+longitudeStr)
}
if params.Subcloud != "" {
queryParams = append(queryParams, "subcloud="+url.QueryEscape(params.Subcloud))
}
endpoint := vipGroupByDatacenterEndpoint
if len(queryParams) > 0 {
endpoint += "?" + strings.Join(queryParams, "&")
}
err := common.ReadAllPages(service.Client, endpoint, &zscalerVips)
if err != nil {
return nil, err
}
return zscalerVips, nil
}
func (service *Service) GetAll() ([]DatacenterVIPS, error) {
var dataCenters []DatacenterVIPS
err := common.ReadAllPages(service.Client, vipGroupByDatacenterEndpoint, &dataCenters)
return dataCenters, err
}