-
Notifications
You must be signed in to change notification settings - Fork 48
/
edge_caag.go
128 lines (109 loc) · 3.79 KB
/
edge_caag.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package goaviatrix
import (
"context"
"fmt"
"io"
"os"
"strings"
)
type EdgeCaag struct {
Action string `form:"action,omitempty"`
CID string `form:"CID,omitempty"`
Type string `form:"type,omitempty"`
Caag bool `form:"caag,omitempty"`
Name string `form:"gateway_name,omitempty" json:"name"`
ManagementInterfaceConfig string
ManagementEgressIpPrefix string `form:"mgmt_egress_ip" json:"mgmt_egress_ip"`
EnableOverPrivateNetwork bool `form:"mgmt_over_private_network,omitempty" json:"mgmt_over_private_network"`
WanInterfaceIpPrefix string `form:"wan_ip,omitempty" json:"wan_ip"`
WanDefaultGatewayIp string `form:"wan_default_gateway,omitempty" json:"wan_default_gateway"`
LanInterfaceIpPrefix string `form:"lan_ip,omitempty" json:"lan_ip"`
ManagementInterfaceIpPrefix string `form:"mgmt_ip,omitempty" json:"mgmt_ip"`
ManagementDefaultGatewayIp string `form:"mgmt_default_gateway,omitempty" json:"mgmt_default_gateway"`
DnsServerIp string `form:"dns_server_ip,omitempty" json:"dns_server_ip"`
SecondaryDnsServerIp string `form:"dns_server_ip_secondary,omitempty" json:"dns_server_ip_secondary"`
Dhcp bool `form:"dhcp,omitempty" json:"dhcp"`
Hpe bool `form:"hpe,omitempty"`
ZtpFileType string `form:"ztp_file_type,omitempty"`
ZtpFileDownloadPath string
State string `json:"state"`
}
func (c *Client) CreateEdgeCaag(ctx context.Context, edgeCaag *EdgeCaag) error {
edgeCaag.Action = "create_edge_gateway"
edgeCaag.CID = c.CID
edgeCaag.Type = "caag"
edgeCaag.Caag = true
edgeCaag.Hpe = false
if edgeCaag.ManagementInterfaceConfig == "DHCP" {
edgeCaag.Dhcp = true
}
resp, err := c.PostAPIDownloadContext(ctx, edgeCaag.Action, edgeCaag, BasicCheck)
if err != nil {
return err
}
var fileName string
if edgeCaag.ZtpFileType == "iso" {
fileName = edgeCaag.ZtpFileDownloadPath + "/" + edgeCaag.Name + ".iso"
} else {
fileName = edgeCaag.ZtpFileDownloadPath + "/" + edgeCaag.Name + "-cloud-init.txt"
}
outFile, err := os.Create(fileName)
if err != nil {
return err
}
_, err = io.Copy(outFile, resp)
if err != nil {
return err
}
return nil
}
func (c *Client) GetEdgeCaag(ctx context.Context, name string) (*EdgeCaag, error) {
form := map[string]string{
"action": "get_cloudwan_device_details",
"CID": c.CID,
"device_name": name,
}
type Resp struct {
Return bool `json:"return"`
Results EdgeCaag `json:"results"`
Reason string `json:"reason"`
}
var data Resp
checkFunc := func(act, method, reason string, ret bool) error {
if !ret {
if strings.Contains(reason, "does not exist") {
return ErrNotFound
}
return fmt.Errorf("rest API %s %s failed: %s", act, method, reason)
}
return nil
}
err := c.GetAPIContext(ctx, &data, form["action"], form, checkFunc)
if err != nil {
return nil, err
}
return &data.Results, nil
}
func (c *Client) UpdateEdgeCaag(ctx context.Context, edgeCaag *EdgeCaag) error {
form := map[string]string{
"action": "update_edge_gateway",
"CID": c.CID,
"gateway_name": edgeCaag.Name,
"mgmt_egress_ip": edgeCaag.ManagementEgressIpPrefix,
}
return c.PostAPIContext(ctx, form["action"], form, BasicCheck)
}
func (c *Client) DeleteEdgeCaag(ctx context.Context, name string, state string) error {
form := map[string]string{
"CID": c.CID,
}
if state == "check" || state == "waiting" {
form["action"] = "reset_managed_cloudn_to_factory_state"
form["device_name"] = name
} else {
form["action"] = "delete_edge_gateway"
form["name"] = name
form["caag"] = "true"
}
return c.PostAPIContext(ctx, form["action"], form, BasicCheck)
}