/
split_tunnel.go
80 lines (70 loc) · 2.24 KB
/
split_tunnel.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
package goaviatrix
import (
"fmt"
"strings"
)
type SplitTunnel struct {
Action string `form:"action,omitempty"`
CID string `form:"CID,omitempty"`
Command string `form:"command,omitempty"`
VpcID string `form:"vpc_id,omitempty"`
ElbName string `form:"lb_name,omitempty"`
SplitTunnel string `form:"split_tunnel,omitempty"`
AdditionalCidrs string `form:"additional_cidrs,omitempty"`
NameServers string `form:"nameservers,omitempty"`
SearchDomains string `form:"search_domains,omitempty"`
SaveTemplate string `form:"save_template,omitempty"`
Dns string `form:"dns,omitempty"`
}
type SplitTunnelResp struct {
Return bool `json:"return"`
Results SplitTunnelUnit `json:"results"`
Reason string `json:"reason"`
}
type SplitTunnelUnit struct {
NameServers string `json:"name_servers"`
SplitTunnel string `json:"split_tunnel"`
SearchDomains string `json:"search_domains"`
AdditionalCidrs string `json:"additional_cidrs"`
}
func (c *Client) GetSplitTunnel(splitTunnel *SplitTunnel) (*SplitTunnelUnit, error) {
form := map[string]string{
"CID": c.CID,
"action": "modify_split_tunnel",
"command": "get",
"vpc_id": splitTunnel.VpcID,
"lb_name": splitTunnel.ElbName,
}
var data SplitTunnelResp
err := c.GetAPI(&data, form["action"], form, BasicCheck)
if err != nil {
return nil, err
}
return &data.Results, nil
}
func (c *Client) ModifySplitTunnel(splitTunnel *SplitTunnel) error {
form := map[string]string{
"CID": c.CID,
"action": "modify_split_tunnel",
"command": "modify",
"vpc_id": splitTunnel.VpcID,
"lb_name": splitTunnel.ElbName,
"split_tunnel": splitTunnel.SplitTunnel,
"additional_cidrs": splitTunnel.AdditionalCidrs,
"nameservers": splitTunnel.NameServers,
"search_domains": splitTunnel.SearchDomains,
}
if splitTunnel.Dns == "true" {
form["dns"] = "true"
}
check := func(action, method, reason string, ret bool) error {
if !ret {
if strings.Contains(reason, "Nothing to modify.") {
return nil
}
return fmt.Errorf("rest API %s %s failed: %s", action, method, reason)
}
return nil
}
return c.PostAPI(form["action"], form, check)
}