github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_alb_importable_clouds.go (about)

     1  /*
     2   * Copyright 2021 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     3   */
     4  
     5  package govcd
     6  
     7  import (
     8  	"errors"
     9  	"fmt"
    10  	"net/url"
    11  
    12  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    13  )
    14  
    15  // NsxtAlbImportableCloud allows user to list importable NSX-T ALB Clouds. Each importable cloud can only be imported
    16  // once by using NsxtAlbCloud construct. It has a flag AlreadyImported which hints if it is already consumed or not.
    17  type NsxtAlbImportableCloud struct {
    18  	NsxtAlbImportableCloud *types.NsxtAlbImportableCloud
    19  	vcdClient              *VCDClient
    20  }
    21  
    22  // GetAllAlbImportableClouds returns importable NSX-T ALB Clouds.
    23  // parentAlbControllerUrn (ID in URN format of a parent ALB Controller) is mandatory
    24  func (vcdClient *VCDClient) GetAllAlbImportableClouds(parentAlbControllerUrn string, queryParameters url.Values) ([]*NsxtAlbImportableCloud, error) {
    25  	client := vcdClient.Client
    26  	if parentAlbControllerUrn == "" {
    27  		return nil, fmt.Errorf("parent ALB Controller ID is required")
    28  	}
    29  	if !client.IsSysAdmin {
    30  		return nil, errors.New("handling NSX-T ALB Importable Clouds require System user")
    31  	}
    32  
    33  	endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbImportableClouds
    34  	apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint)
    35  	if err != nil {
    36  		return nil, err
    37  	}
    38  
    39  	urlRef, err := client.OpenApiBuildEndpoint(endpoint)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  
    44  	queryParams := copyOrNewUrlValues(queryParameters)
    45  	queryParams = queryParameterFilterAnd(fmt.Sprintf("_context==%s", parentAlbControllerUrn), queryParams)
    46  	typeResponses := []*types.NsxtAlbImportableCloud{{}}
    47  	err = client.OpenApiGetAllItems(apiVersion, urlRef, queryParams, &typeResponses, nil)
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	wrappedResponses := make([]*NsxtAlbImportableCloud, len(typeResponses))
    53  	for sliceIndex := range typeResponses {
    54  		wrappedResponses[sliceIndex] = &NsxtAlbImportableCloud{
    55  			NsxtAlbImportableCloud: typeResponses[sliceIndex],
    56  			vcdClient:              vcdClient,
    57  		}
    58  	}
    59  
    60  	return wrappedResponses, nil
    61  }
    62  
    63  // GetAlbImportableCloudByName returns importable NSX-T ALB Clouds.
    64  func (vcdClient *VCDClient) GetAlbImportableCloudByName(parentAlbControllerUrn, name string) (*NsxtAlbImportableCloud, error) {
    65  	albImportableClouds, err := vcdClient.GetAllAlbImportableClouds(parentAlbControllerUrn, nil)
    66  	if err != nil {
    67  		return nil, fmt.Errorf("error finding NSX-T ALB Importable Cloud by Name '%s': %s", name, err)
    68  	}
    69  
    70  	// Filtering by Name is not supported by API therefore it must be filtered on client side
    71  	var foundResult bool
    72  	var foundAlbImportableCloud *NsxtAlbImportableCloud
    73  	for i, value := range albImportableClouds {
    74  		if albImportableClouds[i].NsxtAlbImportableCloud.DisplayName == name {
    75  			foundResult = true
    76  			foundAlbImportableCloud = value
    77  			break
    78  		}
    79  	}
    80  
    81  	if !foundResult {
    82  		return nil, fmt.Errorf("%s: could not find NSX-T ALB Importable Cloud by Name %s", ErrorEntityNotFound, name)
    83  	}
    84  
    85  	return foundAlbImportableCloud, nil
    86  }
    87  
    88  // GetAlbImportableCloudById returns importable NSX-T ALB Clouds.
    89  // Note. ID filtering is performed on client side
    90  func (vcdClient *VCDClient) GetAlbImportableCloudById(parentAlbControllerUrn, id string) (*NsxtAlbImportableCloud, error) {
    91  	albImportableClouds, err := vcdClient.GetAllAlbImportableClouds(parentAlbControllerUrn, nil)
    92  	if err != nil {
    93  		return nil, fmt.Errorf("error finding NSX-T ALB Importable Cloud by ID '%s': %s", id, err)
    94  	}
    95  
    96  	// Filtering by ID is not supported by API therefore it must be filtered on client side
    97  	var foundResult bool
    98  	var foundAlbImportableCloud *NsxtAlbImportableCloud
    99  	for i, value := range albImportableClouds {
   100  		if albImportableClouds[i].NsxtAlbImportableCloud.ID == id {
   101  			foundResult = true
   102  			foundAlbImportableCloud = value
   103  		}
   104  	}
   105  
   106  	if !foundResult {
   107  		return nil, fmt.Errorf("%s: could not find NSX-T ALB Importable Cloud by ID %s", ErrorEntityNotFound, id)
   108  	}
   109  
   110  	return foundAlbImportableCloud, nil
   111  }
   112  
   113  // GetAllAlbImportableClouds is attached to NsxtAlbController type for a convenient parent/child relationship
   114  func (nsxtAlbController *NsxtAlbController) GetAllAlbImportableClouds(queryParameters url.Values) ([]*NsxtAlbImportableCloud, error) {
   115  	return nsxtAlbController.vcdClient.GetAllAlbImportableClouds(nsxtAlbController.NsxtAlbController.ID, queryParameters)
   116  }
   117  
   118  // GetAlbImportableCloudByName is attached to NsxtAlbController type for a convenient parent/child relationship
   119  func (nsxtAlbController *NsxtAlbController) GetAlbImportableCloudByName(name string) (*NsxtAlbImportableCloud, error) {
   120  	return nsxtAlbController.vcdClient.GetAlbImportableCloudByName(nsxtAlbController.NsxtAlbController.ID, name)
   121  }