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  }