github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_route_advertisement.go (about) 1 /* 2 * Copyright 2022 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 3 */ 4 5 package govcd 6 7 import ( 8 "fmt" 9 10 "github.com/vmware/go-vcloud-director/v2/types/v56" 11 ) 12 13 // GetNsxtRouteAdvertisementWithContext retrieves the list of subnets that will be advertised so that the Edge Gateway can route 14 // out to the connected external network. 15 func (egw *NsxtEdgeGateway) GetNsxtRouteAdvertisementWithContext(useTenantContext bool) (*types.RouteAdvertisement, error) { 16 err := checkSanityNsxtEdgeGatewayRouteAdvertisement(egw) 17 if err != nil { 18 return nil, err 19 } 20 21 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtRouteAdvertisement 22 23 highestApiVersion, err := egw.client.getOpenApiHighestElevatedVersion(endpoint) 24 if err != nil { 25 return nil, err 26 } 27 28 urlRef, err := egw.client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, egw.EdgeGateway.ID)) 29 if err != nil { 30 return nil, err 31 } 32 33 var tenantContextHeaders map[string]string 34 if useTenantContext { 35 tenantContext, err := egw.getTenantContext() 36 if err != nil { 37 return nil, err 38 } 39 40 tenantContextHeaders = getTenantContextHeader(tenantContext) 41 } 42 43 routeAdvertisement := &types.RouteAdvertisement{} 44 err = egw.client.OpenApiGetItem(highestApiVersion, urlRef, nil, routeAdvertisement, tenantContextHeaders) 45 if err != nil { 46 return nil, err 47 } 48 49 return routeAdvertisement, nil 50 } 51 52 // GetNsxtRouteAdvertisement method is the same as GetNsxtRouteAdvertisementWithContext but sending TenantContext by default 53 func (egw *NsxtEdgeGateway) GetNsxtRouteAdvertisement() (*types.RouteAdvertisement, error) { 54 return egw.GetNsxtRouteAdvertisementWithContext(true) 55 } 56 57 // UpdateNsxtRouteAdvertisementWithContext updates the list of subnets that will be advertised so that the Edge Gateway can route 58 // out to the connected external network. 59 func (egw *NsxtEdgeGateway) UpdateNsxtRouteAdvertisementWithContext(enable bool, subnets []string, useTenantContext bool) (*types.RouteAdvertisement, error) { 60 err := checkSanityNsxtEdgeGatewayRouteAdvertisement(egw) 61 if err != nil { 62 return nil, err 63 } 64 65 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtRouteAdvertisement 66 67 highestApiVersion, err := egw.client.getOpenApiHighestElevatedVersion(endpoint) 68 if err != nil { 69 return nil, err 70 } 71 72 urlRef, err := egw.client.OpenApiBuildEndpoint(fmt.Sprintf(endpoint, egw.EdgeGateway.ID)) 73 if err != nil { 74 return nil, err 75 } 76 77 var tenantContextHeaders map[string]string 78 if useTenantContext { 79 tenantContext, err := egw.getTenantContext() 80 if err != nil { 81 return nil, err 82 } 83 84 tenantContextHeaders = getTenantContextHeader(tenantContext) 85 } 86 87 routeAdvertisement := &types.RouteAdvertisement{ 88 Enable: enable, 89 Subnets: subnets, 90 } 91 92 err = egw.client.OpenApiPutItem(highestApiVersion, urlRef, nil, routeAdvertisement, nil, tenantContextHeaders) 93 if err != nil { 94 return nil, err 95 } 96 97 return egw.GetNsxtRouteAdvertisementWithContext(useTenantContext) 98 } 99 100 // UpdateNsxtRouteAdvertisement method is the same as UpdateNsxtRouteAdvertisementWithContext but sending TenantContext by default 101 func (egw *NsxtEdgeGateway) UpdateNsxtRouteAdvertisement(enable bool, subnets []string) (*types.RouteAdvertisement, error) { 102 return egw.UpdateNsxtRouteAdvertisementWithContext(enable, subnets, true) 103 } 104 105 // DeleteNsxtRouteAdvertisementWithContext deletes the list of subnets that will be advertised. 106 func (egw *NsxtEdgeGateway) DeleteNsxtRouteAdvertisementWithContext(useTenantContext bool) error { 107 _, err := egw.UpdateNsxtRouteAdvertisementWithContext(false, []string{}, useTenantContext) 108 return err 109 } 110 111 // DeleteNsxtRouteAdvertisement method is the same as DeleteNsxtRouteAdvertisementWithContext but sending TenantContext by default 112 func (egw *NsxtEdgeGateway) DeleteNsxtRouteAdvertisement() error { 113 return egw.DeleteNsxtRouteAdvertisementWithContext(true) 114 } 115 116 // checkSanityNsxtEdgeGatewayRouteAdvertisement function performs some checks to *NsxtEdgeGateway parameter and returns error 117 // if something is wrong. It is useful with methods NsxtEdgeGateway.[Get/Update/Delete]NsxtRouteAdvertisement 118 func checkSanityNsxtEdgeGatewayRouteAdvertisement(egw *NsxtEdgeGateway) error { 119 if egw.EdgeGateway == nil { 120 return fmt.Errorf("the EdgeGateway pointer is nil. Please initialize it first before using this method") 121 } 122 123 if egw.EdgeGateway.ID == "" { 124 return fmt.Errorf("the EdgeGateway ID is empty. Please initialize it first before using this method") 125 } 126 127 return nil 128 }