github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/vsphere_vcenter.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 "github.com/vmware/go-vcloud-director/v2/types/v56" 10 "net/url" 11 ) 12 13 type VCenter struct { 14 VSphereVCenter *types.VSphereVirtualCenter 15 client *VCDClient 16 } 17 18 func (vcdClient *VCDClient) GetAllVCenters(queryParams url.Values) ([]*VCenter, error) { 19 client := vcdClient.Client 20 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointVirtualCenters 21 minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 22 if err != nil { 23 return nil, err 24 } 25 26 urlRef, err := client.OpenApiBuildEndpoint(endpoint) 27 if err != nil { 28 return nil, err 29 } 30 31 var retrieved []*types.VSphereVirtualCenter 32 33 err = client.OpenApiGetAllItems(minimumApiVersion, urlRef, queryParams, &retrieved, nil) 34 if err != nil { 35 return nil, fmt.Errorf("error getting vCenters list: %s", err) 36 } 37 38 if len(retrieved) == 0 { 39 return nil, nil 40 } 41 var returnList []*VCenter 42 43 for _, r := range retrieved { 44 returnList = append(returnList, &VCenter{ 45 VSphereVCenter: r, 46 client: vcdClient, 47 }) 48 } 49 return returnList, nil 50 } 51 52 func (vcdClient *VCDClient) GetVCenterByName(name string) (*VCenter, error) { 53 vcenters, err := vcdClient.GetAllVCenters(nil) 54 if err != nil { 55 return nil, err 56 } 57 for _, vc := range vcenters { 58 if vc.VSphereVCenter.Name == name { 59 return vc, nil 60 } 61 } 62 return nil, fmt.Errorf("vcenter %s not found: %s", name, ErrorEntityNotFound) 63 } 64 65 func (vcdClient *VCDClient) GetVCenterById(id string) (*VCenter, error) { 66 client := vcdClient.Client 67 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointVirtualCenters 68 minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 69 if err != nil { 70 return nil, err 71 } 72 73 urlRef, err := client.OpenApiBuildEndpoint(endpoint + "/" + id) 74 if err != nil { 75 return nil, err 76 } 77 78 returnObject := &VCenter{ 79 VSphereVCenter: &types.VSphereVirtualCenter{}, 80 client: vcdClient, 81 } 82 83 err = client.OpenApiGetItem(minimumApiVersion, urlRef, nil, returnObject.VSphereVCenter, nil) 84 if err != nil { 85 return nil, fmt.Errorf("error getting vCenter: %s", err) 86 } 87 88 return returnObject, nil 89 } 90 91 func (vcenter VCenter) GetVimServerUrl() (string, error) { 92 return url.JoinPath(vcenter.client.Client.VCDHREF.String(), "admin", "extension", "vimServer", extractUuid(vcenter.VSphereVCenter.VcId)) 93 }