forked from vmware/go-vcloud-director
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnsxt_route_advertisement.go
112 lines (89 loc) · 3.42 KB
/
nsxt_route_advertisement.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
/*
* Copyright 2022 VMware, Inc. All rights reserved. Licensed under the Apache v2 License.
*/
package govcd
import (
"fmt"
"github.com/vmware/go-vcloud-director/v2/types/v56"
)
// GetNsxtRouteAdvertisement retrieves the list of subnets that will be advertised so that the Edge Gateway can route
// out to the connected external network.
func (egw *NsxtEdgeGateway) GetNsxtRouteAdvertisement(useTenantContext bool) (*types.RouteAdvertisement, error) {
err := checkSanityNsxtEdgeGatewayRouteAdvertisement(egw)
if err != nil {
return nil, err
}
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtRouteAdvertisement
highestApiVersion, err := egw.client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
urlRef, err := egw.client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, egw.EdgeGateway.ID))
if err != nil {
return nil, err
}
var tenantContextHeaders map[string]string
if useTenantContext {
tenantContext, err := egw.getTenantContext()
if err != nil {
return nil, err
}
tenantContextHeaders = getTenantContextHeader(tenantContext)
}
routeAdvertisement := &types.RouteAdvertisement{}
err = egw.client.OpenApiGetItem(highestApiVersion, urlRef, nil, routeAdvertisement, tenantContextHeaders)
if err != nil {
return nil, err
}
return routeAdvertisement, nil
}
// UpdateNsxtRouteAdvertisement updates the list of subnets that will be advertised so that the Edge Gateway can route
// out to the connected external network.
func (egw *NsxtEdgeGateway) UpdateNsxtRouteAdvertisement(enable bool, subnets []string, useTenantContext bool) (*types.RouteAdvertisement, error) {
err := checkSanityNsxtEdgeGatewayRouteAdvertisement(egw)
if err != nil {
return nil, err
}
endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtRouteAdvertisement
highestApiVersion, err := egw.client.getOpenApiHighestElevatedVersion(endpoint)
if err != nil {
return nil, err
}
urlRef, err := egw.client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, egw.EdgeGateway.ID))
if err != nil {
return nil, err
}
var tenantContextHeaders map[string]string
if useTenantContext {
tenantContext, err := egw.getTenantContext()
if err != nil {
return nil, err
}
tenantContextHeaders = getTenantContextHeader(tenantContext)
}
routeAdvertisement := &types.RouteAdvertisement{
Enable: enable,
Subnets: subnets,
}
err = egw.client.OpenApiPutItem(highestApiVersion, urlRef, nil, routeAdvertisement, nil, tenantContextHeaders)
if err != nil {
return nil, err
}
return egw.GetNsxtRouteAdvertisement(useTenantContext)
}
// DeleteNsxtRouteAdvertisement deletes the list of subnets that will be advertised.
func (egw *NsxtEdgeGateway) DeleteNsxtRouteAdvertisement(useTenantContext bool) error {
_, err := egw.UpdateNsxtRouteAdvertisement(false, []string{}, useTenantContext)
return err
}
// checkSanityNsxtEdgeGatewayRouteAdvertisement function performs some checks to *NsxtEdgeGateway parameter and returns error
// if something is wrong. It is useful with methods NsxtEdgeGateway.[Get/Update/Delete]NsxtRouteAdvertisement
func checkSanityNsxtEdgeGatewayRouteAdvertisement(egw *NsxtEdgeGateway) error {
if egw.EdgeGateway == nil {
return fmt.Errorf("the EdgeGateway pointer is nil. Please initialize it first before using this method")
}
if egw.EdgeGateway.ID == "" {
return fmt.Errorf("the EdgeGateway ID is empty. Please initialize it first before using this method")
}
return nil
}