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  }