github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_alb_service_engine_group_assignment.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 // NsxtAlbServiceEngineGroupAssignment handles Service Engine Group Assignment to NSX-T Edge Gateways 16 type NsxtAlbServiceEngineGroupAssignment struct { 17 NsxtAlbServiceEngineGroupAssignment *types.NsxtAlbServiceEngineGroupAssignment 18 vcdClient *VCDClient 19 } 20 21 func (vcdClient *VCDClient) GetAllAlbServiceEngineGroupAssignments(queryParameters url.Values) ([]*NsxtAlbServiceEngineGroupAssignment, error) { 22 client := vcdClient.Client 23 24 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroupAssignments 25 apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 26 if err != nil { 27 return nil, err 28 } 29 30 urlRef, err := client.OpenApiBuildEndpoint(endpoint) 31 if err != nil { 32 return nil, err 33 } 34 35 typeResponses := []*types.NsxtAlbServiceEngineGroupAssignment{{}} 36 err = client.OpenApiGetAllItems(apiVersion, urlRef, queryParameters, &typeResponses, nil) 37 if err != nil { 38 return nil, err 39 } 40 41 wrappedResponses := make([]*NsxtAlbServiceEngineGroupAssignment, len(typeResponses)) 42 for sliceIndex := range typeResponses { 43 wrappedResponses[sliceIndex] = &NsxtAlbServiceEngineGroupAssignment{ 44 NsxtAlbServiceEngineGroupAssignment: typeResponses[sliceIndex], 45 vcdClient: vcdClient, 46 } 47 } 48 49 return wrappedResponses, nil 50 } 51 52 func (vcdClient *VCDClient) GetAlbServiceEngineGroupAssignmentById(id string) (*NsxtAlbServiceEngineGroupAssignment, error) { 53 client := vcdClient.Client 54 55 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroupAssignments 56 apiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 57 if err != nil { 58 return nil, err 59 } 60 61 urlRef, err := client.OpenApiBuildEndpoint(endpoint, id) 62 if err != nil { 63 return nil, err 64 } 65 66 typeResponse := &types.NsxtAlbServiceEngineGroupAssignment{} 67 68 err = client.OpenApiGetItem(apiVersion, urlRef, nil, &typeResponse, nil) 69 if err != nil { 70 return nil, err 71 } 72 73 wrappedResponse := &NsxtAlbServiceEngineGroupAssignment{ 74 NsxtAlbServiceEngineGroupAssignment: typeResponse, 75 vcdClient: vcdClient, 76 } 77 78 return wrappedResponse, nil 79 } 80 81 func (vcdClient *VCDClient) GetAlbServiceEngineGroupAssignmentByName(name string) (*NsxtAlbServiceEngineGroupAssignment, error) { 82 // Filtering by Service Engine Group name is not supported on API therefore filtering is done locally 83 allServiceEngineGroupAssignments, err := vcdClient.GetAllAlbServiceEngineGroupAssignments(nil) 84 if err != nil { 85 return nil, err 86 } 87 88 var foundGroup *NsxtAlbServiceEngineGroupAssignment 89 90 for _, serviceEngineGroupAssignment := range allServiceEngineGroupAssignments { 91 if serviceEngineGroupAssignment.NsxtAlbServiceEngineGroupAssignment.ServiceEngineGroupRef.Name == name { 92 foundGroup = serviceEngineGroupAssignment 93 } 94 } 95 96 if foundGroup == nil { 97 return nil, ErrorEntityNotFound 98 } 99 100 return foundGroup, nil 101 } 102 103 // GetFilteredAlbServiceEngineGroupAssignmentByName will get all ALB Service Engine Group assignments based on filters 104 // provided in queryParameters additionally will filter by name locally because VCD does not support server side 105 // filtering by name. 106 func (vcdClient *VCDClient) GetFilteredAlbServiceEngineGroupAssignmentByName(name string, queryParameters url.Values) (*NsxtAlbServiceEngineGroupAssignment, error) { 107 // Filtering by Service Engine Group name is not supported on API therefore filtering is done locally 108 allServiceEngineGroupAssignments, err := vcdClient.GetAllAlbServiceEngineGroupAssignments(queryParameters) 109 if err != nil { 110 return nil, err 111 } 112 113 var foundGroup *NsxtAlbServiceEngineGroupAssignment 114 115 for _, serviceEngineGroupAssignment := range allServiceEngineGroupAssignments { 116 if serviceEngineGroupAssignment.NsxtAlbServiceEngineGroupAssignment.ServiceEngineGroupRef.Name == name { 117 foundGroup = serviceEngineGroupAssignment 118 } 119 } 120 121 if foundGroup == nil { 122 return nil, ErrorEntityNotFound 123 } 124 125 return foundGroup, nil 126 } 127 128 func (vcdClient *VCDClient) CreateAlbServiceEngineGroupAssignment(assignmentConfig *types.NsxtAlbServiceEngineGroupAssignment) (*NsxtAlbServiceEngineGroupAssignment, error) { 129 client := vcdClient.Client 130 if !client.IsSysAdmin { 131 return nil, errors.New("handling NSX-T ALB Service Engine Group Assignment require System user") 132 } 133 134 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroupAssignments 135 minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 136 if err != nil { 137 return nil, err 138 } 139 140 urlRef, err := client.OpenApiBuildEndpoint(endpoint) 141 if err != nil { 142 return nil, err 143 } 144 145 returnObject := &NsxtAlbServiceEngineGroupAssignment{ 146 NsxtAlbServiceEngineGroupAssignment: &types.NsxtAlbServiceEngineGroupAssignment{}, 147 vcdClient: vcdClient, 148 } 149 150 err = client.OpenApiPostItem(minimumApiVersion, urlRef, nil, assignmentConfig, returnObject.NsxtAlbServiceEngineGroupAssignment, nil) 151 if err != nil { 152 return nil, fmt.Errorf("error creating NSX-T ALB Service Engine Group Assignment: %s", err) 153 } 154 155 return returnObject, nil 156 } 157 158 // Update updates existing ALB Service Engine Group Assignment with new supplied assignmentConfig configuration 159 func (nsxtEdgeAlbServiceEngineGroup *NsxtAlbServiceEngineGroupAssignment) Update(assignmentConfig *types.NsxtAlbServiceEngineGroupAssignment) (*NsxtAlbServiceEngineGroupAssignment, error) { 160 client := nsxtEdgeAlbServiceEngineGroup.vcdClient.Client 161 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroupAssignments 162 minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 163 if err != nil { 164 return nil, err 165 } 166 167 if assignmentConfig.ID == "" { 168 return nil, fmt.Errorf("cannot update NSX-T ALB Service Engine Group Assignment without ID") 169 } 170 171 urlRef, err := client.OpenApiBuildEndpoint(endpoint, assignmentConfig.ID) 172 if err != nil { 173 return nil, err 174 } 175 176 responseAlbController := &NsxtAlbServiceEngineGroupAssignment{ 177 NsxtAlbServiceEngineGroupAssignment: &types.NsxtAlbServiceEngineGroupAssignment{}, 178 vcdClient: nsxtEdgeAlbServiceEngineGroup.vcdClient, 179 } 180 181 err = client.OpenApiPutItem(minimumApiVersion, urlRef, nil, assignmentConfig, responseAlbController.NsxtAlbServiceEngineGroupAssignment, nil) 182 if err != nil { 183 return nil, fmt.Errorf("error updating NSX-T ALB Service Engine Group Assignment: %s", err) 184 } 185 186 return responseAlbController, nil 187 } 188 189 // Delete deletes NSX-T ALB Service Engine Group Assignment 190 func (nsxtEdgeAlbServiceEngineGroup *NsxtAlbServiceEngineGroupAssignment) Delete() error { 191 client := nsxtEdgeAlbServiceEngineGroup.vcdClient.Client 192 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAlbServiceEngineGroupAssignments 193 minimumApiVersion, err := client.checkOpenApiEndpointCompatibility(endpoint) 194 if err != nil { 195 return err 196 } 197 198 if nsxtEdgeAlbServiceEngineGroup.NsxtAlbServiceEngineGroupAssignment.ID == "" { 199 return fmt.Errorf("cannot delete NSX-T ALB Service Engine Group Assignment without ID") 200 } 201 202 urlRef, err := client.OpenApiBuildEndpoint(endpoint, nsxtEdgeAlbServiceEngineGroup.NsxtAlbServiceEngineGroupAssignment.ID) 203 if err != nil { 204 return err 205 } 206 207 err = client.OpenApiDeleteItem(minimumApiVersion, urlRef, nil, nil) 208 if err != nil { 209 return fmt.Errorf("error deleting NSX-T ALB Service Engine Group Assignment: %s", err) 210 } 211 212 return nil 213 }