forked from vmware/go-vcloud-director
/
anytypeedgegateway.go
89 lines (73 loc) · 2.94 KB
/
anytypeedgegateway.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
/*
* Copyright 2022 VMware, Inc. All rights reserved. Licensed under the Apache v2 License.
*/
package govcd
import (
"fmt"
"net/url"
"github.com/xuanson2406/go-vcloud-director-fptcloud/v2/types/v56"
)
// AnyTypeEdgeGateway is a common structure which fetches any type of Edge Gateway (NSX-T or NSX-V)
// using OpenAPI endpoint. It can be useful to identify type of Edge Gateway or just retrieve common
// fields - like OwnerRef. There is also a function GetNsxtEdgeGateway to convert it to
// NsxtEdgeGateway (if it is an NSX-T one)
type AnyTypeEdgeGateway struct {
EdgeGateway *types.OpenAPIEdgeGateway
client *Client
}
// GetNsxtEdgeGatewayById allows retrieving NSX-T or NSX-V Edge Gateway by ID for Org admins
func (adminOrg *AdminOrg) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error) {
return getAnyTypeApiEdgeGatewayById(adminOrg.client, id, nil)
}
// GetNsxtEdgeGatewayById allows retrieving NSX-T or NSX-V Edge Gateway by ID for Org users
func (org *Org) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error) {
return getAnyTypeApiEdgeGatewayById(org.client, id, nil)
}
// getNsxtEdgeGatewayById is a private parent for wrapped functions:
// func (adminOrg *AdminOrg) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error)
// func (org *Org) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error)
func getAnyTypeApiEdgeGatewayById(client *Client, id string, queryParameters url.Values) (*AnyTypeEdgeGateway, error) {
if id == "" {
return nil, fmt.Errorf("empty Edge Gateway ID")
}
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGateways
apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
urlRef, err := client.OpenApiBuildEndpoint(endpoint, id)
if err != nil {
return nil, err
}
egw := &AnyTypeEdgeGateway{
EdgeGateway: &types.OpenAPIEdgeGateway{},
client: client,
}
err = client.OpenApiGetItem(apiVersion, urlRef, queryParameters, egw.EdgeGateway, nil)
if err != nil {
return nil, err
}
return egw, nil
}
// IsNsxt checks if Edge Gateways is NSX-T backed
func (anyTypeGateway *AnyTypeEdgeGateway) IsNsxt() bool {
if anyTypeGateway != nil && anyTypeGateway.EdgeGateway != nil && anyTypeGateway.EdgeGateway.GatewayBacking != nil {
return anyTypeGateway.EdgeGateway.GatewayBacking.GatewayType == "NSXT_BACKED"
}
return false
}
// IsNsxv checks if Edge Gateways is NSX-V backed
func (anyTypeGateway *AnyTypeEdgeGateway) IsNsxv() bool {
return !anyTypeGateway.IsNsxt()
}
// GetNsxtEdgeGateway converts `AnyTypeEdgeGateway` to `NsxtEdgeGateway` if it is an NSX-T one
func (anyTypeGateway *AnyTypeEdgeGateway) GetNsxtEdgeGateway() (*NsxtEdgeGateway, error) {
if !anyTypeGateway.IsNsxt() {
return nil, fmt.Errorf("this is not an NSX-T backed Edge Gateway")
}
nsxtEdgeGateway := &NsxtEdgeGateway{
EdgeGateway: anyTypeGateway.EdgeGateway,
client: anyTypeGateway.client,
}
return nsxtEdgeGateway, nil
}