github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/anytypeedgegateway.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  	"net/url"
    10  
    11  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    12  )
    13  
    14  // AnyTypeEdgeGateway is a common structure which fetches any type of Edge Gateway (NSX-T or NSX-V)
    15  // using OpenAPI endpoint. It can be useful to identify type of Edge Gateway or just retrieve common
    16  // fields - like OwnerRef. There is also a function GetNsxtEdgeGateway to convert it to
    17  // NsxtEdgeGateway (if it is an NSX-T one)
    18  type AnyTypeEdgeGateway struct {
    19  	EdgeGateway *types.OpenAPIEdgeGateway
    20  	client      *Client
    21  }
    22  
    23  // GetNsxtEdgeGatewayById allows retrieving NSX-T or NSX-V Edge Gateway by ID for Org admins
    24  func (adminOrg *AdminOrg) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error) {
    25  	return getAnyTypeApiEdgeGatewayById(adminOrg.client, id, nil)
    26  }
    27  
    28  // GetNsxtEdgeGatewayById allows retrieving NSX-T or NSX-V Edge Gateway by ID for Org users
    29  func (org *Org) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error) {
    30  	return getAnyTypeApiEdgeGatewayById(org.client, id, nil)
    31  }
    32  
    33  // getNsxtEdgeGatewayById is a private parent for wrapped functions:
    34  // func (adminOrg *AdminOrg) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error)
    35  // func (org *Org) GetAnyTypeEdgeGatewayById(id string) (*AnyTypeEdgeGateway, error)
    36  func getAnyTypeApiEdgeGatewayById(client *Client, id string, queryParameters url.Values) (*AnyTypeEdgeGateway, error) {
    37  	if id == "" {
    38  		return nil, fmt.Errorf("empty Edge Gateway ID")
    39  	}
    40  
    41  	endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointEdgeGateways
    42  	apiVersion, err := client.getOpenApiHighestElevatedVersion(endpoint)
    43  	if err != nil {
    44  		return nil, err
    45  	}
    46  
    47  	urlRef, err := client.OpenApiBuildEndpoint(endpoint, id)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	egw := &AnyTypeEdgeGateway{
    53  		EdgeGateway: &types.OpenAPIEdgeGateway{},
    54  		client:      client,
    55  	}
    56  
    57  	err = client.OpenApiGetItem(apiVersion, urlRef, queryParameters, egw.EdgeGateway, nil)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  	return egw, nil
    62  }
    63  
    64  // IsNsxt checks if Edge Gateways is NSX-T backed
    65  func (anyTypeGateway *AnyTypeEdgeGateway) IsNsxt() bool {
    66  	if anyTypeGateway != nil && anyTypeGateway.EdgeGateway != nil && anyTypeGateway.EdgeGateway.GatewayBacking != nil {
    67  		return anyTypeGateway.EdgeGateway.GatewayBacking.GatewayType == "NSXT_BACKED"
    68  	}
    69  	return false
    70  }
    71  
    72  // IsNsxv checks if Edge Gateways is NSX-V backed
    73  func (anyTypeGateway *AnyTypeEdgeGateway) IsNsxv() bool {
    74  	return !anyTypeGateway.IsNsxt()
    75  }
    76  
    77  // GetNsxtEdgeGateway converts `AnyTypeEdgeGateway` to `NsxtEdgeGateway` if it is an NSX-T one
    78  func (anyTypeGateway *AnyTypeEdgeGateway) GetNsxtEdgeGateway() (*NsxtEdgeGateway, error) {
    79  	if !anyTypeGateway.IsNsxt() {
    80  		return nil, fmt.Errorf("this is not an NSX-T backed Edge Gateway")
    81  	}
    82  
    83  	nsxtEdgeGateway := &NsxtEdgeGateway{
    84  		EdgeGateway: anyTypeGateway.EdgeGateway,
    85  		client:      anyTypeGateway.client,
    86  	}
    87  
    88  	return nsxtEdgeGateway, nil
    89  }