/
tunnel_virtual_networks.go
159 lines (129 loc) · 4.88 KB
/
tunnel_virtual_networks.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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package cloudflare
import (
"context"
"errors"
"fmt"
"net/http"
"time"
"github.com/goccy/go-json"
)
var ErrMissingVnetName = errors.New("required missing virtual network name")
// TunnelVirtualNetwork is segregation of Tunnel IP Routes via Virtualized
// Networks to handle overlapping private IPs in your origins.
type TunnelVirtualNetwork struct {
ID string `json:"id"`
Name string `json:"name"`
IsDefaultNetwork bool `json:"is_default_network"`
Comment string `json:"comment"`
CreatedAt *time.Time `json:"created_at"`
DeletedAt *time.Time `json:"deleted_at"`
}
type TunnelVirtualNetworksListParams struct {
ID string `url:"id,omitempty"`
Name string `url:"name,omitempty"`
IsDefault *bool `url:"is_default,omitempty"`
IsDeleted *bool `url:"is_deleted,omitempty"`
PaginationOptions
}
type TunnelVirtualNetworkCreateParams struct {
Name string `json:"name"`
Comment string `json:"comment"`
IsDefault bool `json:"is_default"`
}
type TunnelVirtualNetworkUpdateParams struct {
VnetID string `json:"-"`
Name string `json:"name,omitempty"`
Comment string `json:"comment,omitempty"`
IsDefaultNetwork *bool `json:"is_default_network,omitempty"`
}
// tunnelRouteListResponse is the API response for listing tunnel virtual
// networks.
type tunnelVirtualNetworkListResponse struct {
Response
Result []TunnelVirtualNetwork `json:"result"`
}
type tunnelVirtualNetworkResponse struct {
Response
Result TunnelVirtualNetwork `json:"result"`
}
// ListTunnelVirtualNetworks lists all defined virtual networks for tunnels in
// the account.
//
// API reference: https://api.cloudflare.com/#tunnel-virtual-network-list-virtual-networks
func (api *API) ListTunnelVirtualNetworks(ctx context.Context, rc *ResourceContainer, params TunnelVirtualNetworksListParams) ([]TunnelVirtualNetwork, error) {
if rc.Identifier == "" {
return []TunnelVirtualNetwork{}, ErrMissingAccountID
}
uri := buildURI(fmt.Sprintf("/%s/%s/teamnet/virtual_networks", AccountRouteRoot, rc.Identifier), params)
res, err := api.makeRequestContext(ctx, http.MethodGet, uri, params)
if err != nil {
return []TunnelVirtualNetwork{}, err
}
var resp tunnelVirtualNetworkListResponse
err = json.Unmarshal(res, &resp)
if err != nil {
return []TunnelVirtualNetwork{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
}
return resp.Result, nil
}
// CreateTunnelVirtualNetwork adds a new virtual network to the account.
//
// API reference: https://api.cloudflare.com/#tunnel-virtual-network-create-virtual-network
func (api *API) CreateTunnelVirtualNetwork(ctx context.Context, rc *ResourceContainer, params TunnelVirtualNetworkCreateParams) (TunnelVirtualNetwork, error) {
if rc.Identifier == "" {
return TunnelVirtualNetwork{}, ErrMissingAccountID
}
if params.Name == "" {
return TunnelVirtualNetwork{}, ErrMissingVnetName
}
uri := fmt.Sprintf("/%s/%s/teamnet/virtual_networks", AccountRouteRoot, rc.Identifier)
responseBody, err := api.makeRequestContext(ctx, http.MethodPost, uri, params)
if err != nil {
return TunnelVirtualNetwork{}, err
}
var resp tunnelVirtualNetworkResponse
err = json.Unmarshal(responseBody, &resp)
if err != nil {
return TunnelVirtualNetwork{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
}
return resp.Result, nil
}
// DeleteTunnelVirtualNetwork deletes an existing virtual network from the
// account.
//
// API reference: https://api.cloudflare.com/#tunnel-virtual-network-delete-virtual-network
func (api *API) DeleteTunnelVirtualNetwork(ctx context.Context, rc *ResourceContainer, vnetID string) error {
if rc.Identifier == "" {
return ErrMissingAccountID
}
uri := fmt.Sprintf("/%s/%s/teamnet/virtual_networks/%s", AccountRouteRoot, rc.Identifier, vnetID)
responseBody, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil)
if err != nil {
return err
}
var resp tunnelVirtualNetworkResponse
err = json.Unmarshal(responseBody, &resp)
if err != nil {
return fmt.Errorf("%s: %w", errUnmarshalError, err)
}
return nil
}
// UpdateTunnelRoute updates an existing virtual network in the account.
//
// API reference: https://api.cloudflare.com/#tunnel-virtual-network-update-virtual-network
func (api *API) UpdateTunnelVirtualNetwork(ctx context.Context, rc *ResourceContainer, params TunnelVirtualNetworkUpdateParams) (TunnelVirtualNetwork, error) {
if rc.Identifier == "" {
return TunnelVirtualNetwork{}, ErrMissingAccountID
}
uri := fmt.Sprintf("/%s/%s/teamnet/virtual_networks/%s", AccountRouteRoot, rc.Identifier, params.VnetID)
responseBody, err := api.makeRequestContext(ctx, http.MethodPatch, uri, params)
if err != nil {
return TunnelVirtualNetwork{}, err
}
var resp tunnelVirtualNetworkResponse
err = json.Unmarshal(responseBody, &resp)
if err != nil {
return TunnelVirtualNetwork{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
}
return resp.Result, nil
}