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  }