Skip to content

Commit

Permalink
Merge pull request #9 from jaxxstorm/segment
Browse files Browse the repository at this point in the history
Add segment support
  • Loading branch information
whereandy authored Jan 18, 2024
2 parents aa89e1d + 24bc124 commit 68cbff6
Show file tree
Hide file tree
Showing 7 changed files with 257 additions and 11 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
terraform.tfstate
terraform.tfstate.backup
.envrc
**/dist
**/bin
7 changes: 7 additions & 0 deletions examples/resources/vantage_segment/provider.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
terraform {
required_providers {
vantage = {
source = "registry.terraform.io/vantage-sh/vantage"
}
}
}
7 changes: 7 additions & 0 deletions examples/resources/vantage_segment/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
resource "vantage_segment" "demo_segment" {
title = "Demo Segment"
description = "This is still a demo segment"
priority = 50
track_unallocated = false
filter = "(costs.provider = 'aws' AND tags.name = NULL)"
}
11 changes: 7 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
module github.com/vantage-sh/terraform-provider-vantage

go 1.20
go 1.21

toolchain go1.21.5

require (
github.com/go-openapi/runtime v0.26.0
github.com/go-openapi/strfmt v0.21.7
github.com/hashicorp/terraform-plugin-docs v0.14.1
github.com/hashicorp/terraform-plugin-framework v1.3.5
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20240109125809-53d58864d5f5
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240109125809-53d58864d5f5
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20230919190050-ab8d2b0a3644
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240118182140-65ef80032d05
)

require (
Expand Down Expand Up @@ -63,6 +65,7 @@ require (
github.com/oklog/ulid v1.3.1 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/russross/blackfriday v1.6.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
Expand All @@ -74,7 +77,7 @@ require (
go.opentelemetry.io/otel/metric v1.16.0 // indirect
go.opentelemetry.io/otel/trace v1.16.0 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/mod v0.9.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
Expand Down
21 changes: 14 additions & 7 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
Expand Down Expand Up @@ -188,6 +189,7 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
Expand All @@ -201,6 +203,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
Expand Down Expand Up @@ -261,12 +264,14 @@ github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSg
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
Expand All @@ -293,11 +298,12 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20240109125809-53d58864d5f5 h1:HvLA2EfCJTffJTZejKhCK1A0cgwOgs6PCrbUmAgGNFU=
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20240109125809-53d58864d5f5/go.mod h1:VnETgI0Ks9FfxbDkLjSOfibET7cSYqDtO/kHngwSFfc=
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240109125809-53d58864d5f5 h1:Kjv2OuAzkD/OFJFtKrmAPmm6nnAgB4Qki2NqQ5Vtub8=
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240109125809-53d58864d5f5/go.mod h1:Vd7Orkt/F7kQIyHSNVgwGvsC+kJlUJPfIMg8q8+n9zI=
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20230919190050-ab8d2b0a3644 h1:KIj36a+2V8auoh+JUFNsq8aXMuE2Gb03mVRpJNr9fKI=
github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20230919190050-ab8d2b0a3644/go.mod h1:VnETgI0Ks9FfxbDkLjSOfibET7cSYqDtO/kHngwSFfc=
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240118182140-65ef80032d05 h1:Um7N8xmnYbodfySRIHaRkcw8/MF4hGsg+28YtqRuRjw=
github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240118182140-65ef80032d05/go.mod h1:Vd7Orkt/F7kQIyHSNVgwGvsC+kJlUJPfIMg8q8+n9zI=
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
Expand Down Expand Up @@ -331,6 +337,7 @@ go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeH
go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM=
go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
Expand All @@ -349,8 +356,8 @@ golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
Expand Down
1 change: 1 addition & 0 deletions vantage/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ func (p *vantageProvider) Resources(_ context.Context) []func() resource.Resourc
NewSavedFilterResource,
NewCostReportResource,
NewDashboardResource,
NewSegmentResource,
NewTeamResource,
}
}
219 changes: 219 additions & 0 deletions vantage/segment_resource.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
package vantage

import (
"context"

"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/types"
modelsv2 "github.com/vantage-sh/vantage-go/vantagev2/models"
segmentsv2 "github.com/vantage-sh/vantage-go/vantagev2/vantage/segments"
)

type SegmentResource struct {
client *Client
}

func NewSegmentResource() resource.Resource {
return &SegmentResource{}
}

type SegmentResourceModel struct {
Title types.String `tfsdk:"title"`
Description types.String `tfsdk:"description"`
Priority types.Int64 `tfsdk:"priority"`
WorkspaceToken types.String `tfsdk:"workspace_token"`
Filter types.String `tfsdk:"filter"`
ParentSegmentToken types.String `tfsdk:"parent_segment_token"`
Token types.String `tfsdk:"token"`
TrackUnallocated types.Bool `tfsdk:"track_unallocated"`
}

func (r *SegmentResource) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_segment"
}

func (r SegmentResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = schema.Schema{
Attributes: map[string]schema.Attribute{
"title": schema.StringAttribute{
MarkdownDescription: "The title of the Segment.",
Required: true,
},
"token": schema.StringAttribute{
Computed: true,
MarkdownDescription: "Unique segment identifier",
PlanModifiers: []planmodifier.String{
stringplanmodifier.UseStateForUnknown(),
},
},
"description": schema.StringAttribute{
MarkdownDescription: "The description of the Segment.",
Optional: true,
},
"priority": schema.Int64Attribute{
MarkdownDescription: "The priority of the Segment.",
Optional: true,
},
"workspace_token": schema.StringAttribute{
MarkdownDescription: "Workspace token to add the segment to.",
Optional: true,
Computed: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.UseStateForUnknown(),
},
},
"filter": schema.StringAttribute{
MarkdownDescription: "The filter query language to apply to the Segment. Additional documentation available at https://docs.vantage.sh/vql.",
Optional: true,
},
"track_unallocated": schema.BoolAttribute{
MarkdownDescription: "Whether or not to track unallocated resources in this Segment.",
Computed: true,
Optional: true,
},
"parent_segment_token": schema.StringAttribute{
Optional: true,
Computed: true,
MarkdownDescription: "The token of the parent Segment this new Segment belongs to. Determines the Workspace the segment is assigned to.",
},
},
MarkdownDescription: "Manages a Segment.",
}
}

func (r SegmentResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
var data *SegmentResourceModel

// Read Terraform plan data into the model
resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...)

if resp.Diagnostics.HasError() {
return
}

params := segmentsv2.NewCreateSegmentParams()
body := &modelsv2.PostSegments{
Title: data.Title.ValueStringPointer(),
Filter: data.Filter.ValueString(),
ParentSegmentToken: data.ParentSegmentToken.ValueString(),
Priority: int32(data.Priority.ValueInt64()),
WorkspaceToken: data.WorkspaceToken.ValueString(),
TrackUnallocated: data.TrackUnallocated.ValueBoolPointer(),
}

params.WithSegments(body)
out, err := r.client.V2.Segments.CreateSegment(params, r.client.Auth)
if err != nil {
handleError("Create Segment Resource", &resp.Diagnostics, err)
return
}

data.Token = types.StringValue(out.Payload.Token)
data.WorkspaceToken = types.StringValue(out.Payload.WorkspaceToken)
data.ParentSegmentToken = types.StringValue(out.Payload.ParentFolder)
data.Title = types.StringValue(out.Payload.Title)
data.Filter = types.StringValue(out.Payload.Filter)
data.Priority = types.Int64Value(int64(out.Payload.Priority))
data.TrackUnallocated = types.BoolValue(out.Payload.TrackUnallocated)

resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
}

func (r SegmentResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
var state *SegmentResourceModel
diags := req.State.Get(ctx, &state)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}

params := segmentsv2.NewGetSegmentParams()
params.SetSegmentToken(state.Token.ValueString())
out, err := r.client.V2.Segments.GetSegment(params, r.client.Auth)
if err != nil {
if _, ok := err.(*segmentsv2.GetSegmentNotFound); ok {
resp.State.RemoveResource(ctx)
return
}

handleError("Get Segment Resource", &resp.Diagnostics, err)
return
}


state.Token = types.StringValue(out.Payload.Token)
state.Title = types.StringValue(out.Payload.Title)
state.WorkspaceToken = types.StringValue(out.Payload.WorkspaceToken)
state.ParentSegmentToken = types.StringValue(out.Payload.ParentFolder)
state.Filter = types.StringValue(out.Payload.Filter)
state.Priority = types.Int64Value(int64(out.Payload.Priority))
state.TrackUnallocated = types.BoolValue(out.Payload.TrackUnallocated)

resp.Diagnostics.Append(resp.State.Set(ctx, &state)...)
}

func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
var data *SegmentResourceModel
resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...)
if resp.Diagnostics.HasError() {
return
}


params := segmentsv2.NewUpdateSegmentParams()
params.SetSegmentToken(data.Token.ValueString())

model := &modelsv2.PutSegments{
Title: data.Title.ValueString(),
Filter: data.Filter.ValueString(),
ParentSegmentToken: data.ParentSegmentToken.ValueString(),
Description: data.Description.ValueString(),
Priority: int32(data.Priority.ValueInt64()),
TrackUnallocated: data.TrackUnallocated.ValueBoolPointer(),
}
params.WithSegments(model)

out, err := r.client.V2.Segments.UpdateSegment(params, r.client.Auth)

if err != nil {
handleError("Update Segment Resource", &resp.Diagnostics, err)
return
}

data.Token = types.StringValue(out.Payload.Token)
data.WorkspaceToken = types.StringValue(out.Payload.WorkspaceToken)
data.ParentSegmentToken = types.StringValue(out.Payload.ParentFolder) // FIXME(jaxxstorm): is this correct?
data.Description = types.StringValue(out.Payload.Description)
data.Filter = types.StringValue(out.Payload.Filter)
data.Title = types.StringValue(out.Payload.Title)
data.TrackUnallocated = types.BoolValue(out.Payload.TrackUnallocated)

resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
}

func (r SegmentResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
var state *SegmentResourceModel
resp.Diagnostics.Append(req.State.Get(ctx, &state)...)
if resp.Diagnostics.HasError() {
return
}

params := segmentsv2.NewDeleteSegmentParams()
params.SetSegmentToken(state.Token.ValueString())
_, err := r.client.V2.Segments.DeleteSegment(params, r.client.Auth)
if err != nil {
handleError("Delete Segment Resource", &resp.Diagnostics, err)
}
}

// Configure adds the provider configured client to the data source.
func (r *SegmentResource) Configure(_ context.Context, req resource.ConfigureRequest, _ *resource.ConfigureResponse) {
if req.ProviderData == nil {
return
}

r.client = req.ProviderData.(*Client)
}

0 comments on commit 68cbff6

Please sign in to comment.