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 }