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  }