github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_segment_profile_template.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/url"
    10  
    11  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    12  )
    13  
    14  const labelNsxtSegmentProfileTemplate = "NSX-T Segment Profile Template"
    15  
    16  // NsxtSegmentProfileTemplate contains a structure for configuring Segment Profile Templates
    17  type NsxtSegmentProfileTemplate struct {
    18  	NsxtSegmentProfileTemplate *types.NsxtSegmentProfileTemplate
    19  	VCDClient                  *VCDClient
    20  }
    21  
    22  // wrap is a hidden helper that facilitates the usage of a generic CRUD function
    23  //
    24  //lint:ignore U1000 this method is used in generic functions, but annoys staticcheck
    25  func (n NsxtSegmentProfileTemplate) wrap(inner *types.NsxtSegmentProfileTemplate) *NsxtSegmentProfileTemplate {
    26  	n.NsxtSegmentProfileTemplate = inner
    27  	return &n
    28  }
    29  
    30  // CreateSegmentProfileTemplate creates a Segment Profile Template that can later be assigned to
    31  // global VCD configuration, Org VDC or Org VDC Network
    32  func (vcdClient *VCDClient) CreateSegmentProfileTemplate(segmentProfileConfig *types.NsxtSegmentProfileTemplate) (*NsxtSegmentProfileTemplate, error) {
    33  	c := crudConfig{
    34  		endpoint:    types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtSegmentProfileTemplates,
    35  		entityLabel: labelNsxtSegmentProfileTemplate,
    36  	}
    37  	outerType := NsxtSegmentProfileTemplate{VCDClient: vcdClient}
    38  	return createOuterEntity(&vcdClient.Client, outerType, c, segmentProfileConfig)
    39  }
    40  
    41  // GetAllSegmentProfileTemplates retrieves all Segment Profile Templates
    42  func (vcdClient *VCDClient) GetAllSegmentProfileTemplates(queryFilter url.Values) ([]*NsxtSegmentProfileTemplate, error) {
    43  	c := crudConfig{
    44  		endpoint:        types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtSegmentProfileTemplates,
    45  		entityLabel:     labelNsxtSegmentProfileTemplate,
    46  		queryParameters: queryFilter,
    47  	}
    48  
    49  	outerType := NsxtSegmentProfileTemplate{VCDClient: vcdClient}
    50  	return getAllOuterEntities[NsxtSegmentProfileTemplate, types.NsxtSegmentProfileTemplate](&vcdClient.Client, outerType, c)
    51  }
    52  
    53  // GetSegmentProfileTemplateById retrieves Segment Profile Template by ID
    54  func (vcdClient *VCDClient) GetSegmentProfileTemplateById(id string) (*NsxtSegmentProfileTemplate, error) {
    55  	c := crudConfig{
    56  		endpoint:       types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtSegmentProfileTemplates,
    57  		endpointParams: []string{id},
    58  		entityLabel:    labelNsxtSegmentProfileTemplate,
    59  	}
    60  
    61  	outerType := NsxtSegmentProfileTemplate{VCDClient: vcdClient}
    62  	return getOuterEntity[NsxtSegmentProfileTemplate, types.NsxtSegmentProfileTemplate](&vcdClient.Client, outerType, c)
    63  }
    64  
    65  // GetSegmentProfileTemplateByName retrieves Segment Profile Template by ID
    66  func (vcdClient *VCDClient) GetSegmentProfileTemplateByName(name string) (*NsxtSegmentProfileTemplate, error) {
    67  	filterByName := copyOrNewUrlValues(nil)
    68  	filterByName = queryParameterFilterAnd(fmt.Sprintf("name==%s", name), filterByName)
    69  
    70  	allSegmentProfileTemplates, err := vcdClient.GetAllSegmentProfileTemplates(filterByName)
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  
    75  	singleSegmentProfileTemplate, err := oneOrError("name", name, allSegmentProfileTemplates)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  
    80  	return singleSegmentProfileTemplate, nil
    81  }
    82  
    83  // Update Segment Profile Template
    84  func (spt *NsxtSegmentProfileTemplate) Update(nsxtSegmentProfileTemplateConfig *types.NsxtSegmentProfileTemplate) (*NsxtSegmentProfileTemplate, error) {
    85  	c := crudConfig{
    86  		endpoint:       types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtSegmentProfileTemplates,
    87  		endpointParams: []string{nsxtSegmentProfileTemplateConfig.ID},
    88  		entityLabel:    labelNsxtSegmentProfileTemplate,
    89  	}
    90  	outerType := NsxtSegmentProfileTemplate{VCDClient: spt.VCDClient}
    91  	return updateOuterEntity(&spt.VCDClient.Client, outerType, c, nsxtSegmentProfileTemplateConfig)
    92  }
    93  
    94  // Delete allows deleting NSX-T Segment Profile Template
    95  func (spt *NsxtSegmentProfileTemplate) Delete() error {
    96  	c := crudConfig{
    97  		endpoint:       types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointNsxtSegmentProfileTemplates,
    98  		endpointParams: []string{spt.NsxtSegmentProfileTemplate.ID},
    99  		entityLabel:    labelNsxtSegmentProfileTemplate,
   100  	}
   101  	return deleteEntityById(&spt.VCDClient.Client, c)
   102  }