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 }