/
edge_vm_selfmanaged_ha.go
144 lines (119 loc) · 4.13 KB
/
edge_vm_selfmanaged_ha.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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package goaviatrix
import (
"bytes"
"context"
b64 "encoding/base64"
"encoding/json"
"io"
"os"
)
type EdgeVmSelfmanagedHa struct {
Action string `json:"action"`
CID string `json:"CID"`
PrimaryGwName string `json:"primary_gw_name"`
SiteId string
ZtpFileType string
ZtpFileDownloadPath string
InterfaceList []*EdgeSpokeInterface
Interfaces string `json:"interfaces"`
NoProgressBar bool `json:"no_progress_bar,omitempty"`
ManagementEgressIpPrefix string `json:"mgmt_egress_ip,omitempty"`
CloudInit bool `json:"cloud_init"`
}
type EdgeVmSelfmanagedHaResp struct {
PrimaryGwName string `json:"primary_gw_name"`
GwName string `json:"gw_name"`
SiteId string `json:"vpc_id"`
ZtpFileType string `json:"ztp_file_type"`
InterfaceList []*EdgeSpokeInterface `json:"interfaces"`
ManagementEgressIpPrefix string `json:"mgmt_egress_ip"`
}
type EdgeVmSelfmanagedHaListResp struct {
Return bool `json:"return"`
Results []EdgeVmSelfmanagedHaResp `json:"results"`
Reason string `json:"reason"`
}
type CreateEdgeVmSelfmanagedHaResp struct {
Return bool `json:"return"`
Result string `json:"results"`
Reason string `json:"reason"`
}
func (c *Client) CreateEdgeVmSelfmanagedHa(ctx context.Context, edgeVmSelfmanagedHa *EdgeVmSelfmanagedHa) (string, error) {
edgeVmSelfmanagedHa.CID = c.CID
edgeVmSelfmanagedHa.Action = "create_multicloud_ha_gateway"
edgeVmSelfmanagedHa.NoProgressBar = true
if edgeVmSelfmanagedHa.ZtpFileType == "iso" {
edgeVmSelfmanagedHa.CloudInit = false
} else {
edgeVmSelfmanagedHa.CloudInit = true
}
interfaces, err := json.Marshal(edgeVmSelfmanagedHa.InterfaceList)
if err != nil {
return "", err
}
edgeVmSelfmanagedHa.Interfaces = b64.StdEncoding.EncodeToString(interfaces)
var data CreateEdgeVmSelfmanagedHaResp
gwName, err := c.PostAPIContext2HaGw(ctx, &data, edgeVmSelfmanagedHa.Action, edgeVmSelfmanagedHa, BasicCheck)
if err != nil {
return "", err
}
var fileName string
if edgeVmSelfmanagedHa.ZtpFileType == "iso" {
fileName = edgeVmSelfmanagedHa.ZtpFileDownloadPath + "/" + edgeVmSelfmanagedHa.PrimaryGwName + "-" + edgeVmSelfmanagedHa.SiteId + "-ha.iso"
} else {
fileName = edgeVmSelfmanagedHa.ZtpFileDownloadPath + "/" + edgeVmSelfmanagedHa.PrimaryGwName + "-" + edgeVmSelfmanagedHa.SiteId + "-ha-cloud-init.txt"
}
outFile, err := os.Create(fileName)
if err != nil {
return "", err
}
if edgeVmSelfmanagedHa.ZtpFileType == "iso" {
decodedResult, err := b64.StdEncoding.DecodeString(data.Result)
if err != nil {
return "", err
}
_, err = io.Copy(outFile, bytes.NewReader(decodedResult))
if err != nil {
return "", err
}
} else {
_, err = outFile.WriteString(data.Result)
if err != nil {
return "", err
}
}
return gwName, nil
}
func (c *Client) GetEdgeVmSelfmanagedHa(ctx context.Context, gwName string) (*EdgeVmSelfmanagedHaResp, error) {
form := map[string]string{
"action": "list_vpcs_summary",
"CID": c.CID,
"gateway_name": gwName,
}
var data EdgeVmSelfmanagedHaListResp
err := c.PostAPIContext2(ctx, &data, form["action"], form, BasicCheck)
if err != nil {
return nil, err
}
edgeVmSelfmanagedHaList := data.Results
for _, edgeVmSelfmanagedHa := range edgeVmSelfmanagedHaList {
if edgeVmSelfmanagedHa.GwName == gwName {
return &edgeVmSelfmanagedHa, nil
}
}
return nil, ErrNotFound
}
func (c *Client) UpdateEdgeVmSelfmanagedHa(ctx context.Context, edgeVmSelfmanaged *EdgeSpoke) error {
form := map[string]string{
"action": "update_edge_gateway",
"CID": c.CID,
"name": edgeVmSelfmanaged.GwName,
"mgmt_egress_ip": edgeVmSelfmanaged.ManagementEgressIpPrefix,
}
interfaces, err := json.Marshal(edgeVmSelfmanaged.InterfaceList)
if err != nil {
return err
}
form["interfaces"] = b64.StdEncoding.EncodeToString(interfaces)
return c.PostAPIContext2(ctx, nil, form["action"], form, BasicCheck)
}