github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_manager.go (about) 1 /* 2 * Copyright 2023 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 3 */ 4 5 package govcd 6 7 import ( 8 "fmt" 9 "net/http" 10 11 "github.com/vmware/go-vcloud-director/v2/types/v56" 12 ) 13 14 type NsxtManager struct { 15 NsxtManager *types.NsxtManager 16 VCDClient *VCDClient 17 } 18 19 // GetNsxtManagerByName searches for NSX-T managers available in VCD and returns the one that 20 // matches name 21 func (vcdClient *VCDClient) GetNsxtManagerByName(name string) (*NsxtManager, error) { 22 nsxtManagers, err := vcdClient.QueryNsxtManagerByName(name) 23 if err != nil { 24 return nil, fmt.Errorf("error retrieving NSX-T Manager by name '%s': %s", name, err) 25 } 26 27 // Double check that exactly one NSX-T Manager is found and throw error otherwise 28 singleNsxtManager, err := oneOrError("name", name, nsxtManagers) 29 if err != nil { 30 return nil, err 31 } 32 33 resp, err := vcdClient.Client.executeJsonRequest(singleNsxtManager.HREF, http.MethodGet, nil, "error retrieving NSX-T Manager: %s") 34 if err != nil { 35 return nil, err 36 } 37 38 defer closeBody(resp) 39 40 nsxtManager := NsxtManager{ 41 NsxtManager: &types.NsxtManager{}, 42 VCDClient: vcdClient, 43 } 44 45 err = decodeBody(types.BodyTypeJSON, resp, nsxtManager.NsxtManager) 46 if err != nil { 47 return nil, err 48 } 49 50 return &nsxtManager, nil 51 } 52 53 // Urn ensures that a URN is returned insted of plain UUID because VCD returns UUID, but requires 54 // URN in other APIs quite often. 55 func (nsxtManager *NsxtManager) Urn() (string, error) { 56 if nsxtManager == nil || nsxtManager.NsxtManager == nil || nsxtManager.NsxtManager.ID == "" { 57 return "", fmt.Errorf("NSX-T manager structure is incomplete - cannot build URN without ID") 58 } 59 60 if isUrn(nsxtManager.NsxtManager.ID) { 61 return nsxtManager.NsxtManager.ID, nil 62 } 63 64 nsxtManagerUrn, err := BuildUrnWithUuid("urn:vcloud:nsxtmanager:", nsxtManager.NsxtManager.ID) 65 if err != nil { 66 return "", fmt.Errorf("error building NSX-T Manager URN from ID '%s': %s", nsxtManager.NsxtManager.ID, err) 67 } 68 return nsxtManagerUrn, nil 69 }