From c0b1fe4777f769a51a509c2d52a2f7165e00afc2 Mon Sep 17 00:00:00 2001 From: Lee Briggs Date: Thu, 11 Jan 2024 12:49:32 -0800 Subject: [PATCH 1/4] initial segment commit add segment resource --- .gitignore | 2 + .../resources/vantage_segment/provider.tf | 7 + .../resources/vantage_segment/resource.tf | 7 + go.mod | 4 +- go.sum | 2 - vantage/provider.go | 1 + vantage/segment_resource.go | 212 ++++++++++++++++++ 7 files changed, 232 insertions(+), 3 deletions(-) create mode 100644 examples/resources/vantage_segment/provider.tf create mode 100644 examples/resources/vantage_segment/resource.tf create mode 100644 vantage/segment_resource.go diff --git a/.gitignore b/.gitignore index 81510fb..ac0b62f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ terraform.tfstate terraform.tfstate.backup .envrc +**/dist +**/bin diff --git a/examples/resources/vantage_segment/provider.tf b/examples/resources/vantage_segment/provider.tf new file mode 100644 index 0000000..d511852 --- /dev/null +++ b/examples/resources/vantage_segment/provider.tf @@ -0,0 +1,7 @@ +terraform { + required_providers { + vantage = { + source = "registry.terraform.io/vantage-sh/vantage" + } + } +} \ No newline at end of file diff --git a/examples/resources/vantage_segment/resource.tf b/examples/resources/vantage_segment/resource.tf new file mode 100644 index 0000000..13adc96 --- /dev/null +++ b/examples/resources/vantage_segment/resource.tf @@ -0,0 +1,7 @@ +resource "vantage_segment" "demo_segment" { + title = "Demo Segment" + description = "This is a demo segment" + priority = 100 + track_unallocated = false + filter = "(costs.provider = 'aws' AND tags.name = NULL)" +} diff --git a/go.mod b/go.mod index fa09b90..214e404 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( 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-20230919190050-ab8d2b0a3644 - github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20230919190050-ab8d2b0a3644 + github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240109125809-53d58864d5f5 ) require ( @@ -84,3 +84,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/vantage-sh/vantage-go/vantagev2 => ../vantage-go/vantagev2 diff --git a/go.sum b/go.sum index f886325..c9d0a34 100644 --- a/go.sum +++ b/go.sum @@ -296,8 +296,6 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= 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-20230919190050-ab8d2b0a3644 h1:jh+XJVnkSFoug4BPximgNgsesFIN+/WkHSZ7jmXApP4= -github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20230919190050-ab8d2b0a3644/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= diff --git a/vantage/provider.go b/vantage/provider.go index e38b1dc..5b5a7ee 100644 --- a/vantage/provider.go +++ b/vantage/provider.go @@ -152,5 +152,6 @@ func (p *vantageProvider) Resources(_ context.Context) []func() resource.Resourc NewSavedFilterResource, NewCostReportResource, NewDashboardResource, + NewSegmentResource, } } diff --git a/vantage/segment_resource.go b/vantage/segment_resource.go new file mode 100644 index 0000000..d3daf34 --- /dev/null +++ b/vantage/segment_resource.go @@ -0,0 +1,212 @@ +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: data.Priority.ValueInt64(), + WorkspaceToken: data.WorkspaceToken.ValueString(), + TrackUnallocated: data.TrackUnallocated.ValueBool(), + } + + 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) // FIXME(jaxxstorm): is this correct? + data.Title = types.StringValue(out.Payload.Title) + data.Filter = types.StringValue(out.Payload.Filter) + 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) + + 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: data.Priority.ValueInt64(), FIXME: this is not supported in the API + TrackUnallocated: data.TrackUnallocated.ValueBool(), + } + 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) + + 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) +} From 3fd40e98358f07c8380f00ce7971723a71415536 Mon Sep 17 00:00:00 2001 From: Lee Briggs Date: Fri, 12 Jan 2024 11:34:00 -0800 Subject: [PATCH 2/4] show panic --- .../resources/vantage_segment/resource.tf | 2 +- go.mod | 14 ++++++++----- go.sum | 21 ++++++++++++++++--- vantage/segment_resource.go | 14 +++++++++++-- 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/examples/resources/vantage_segment/resource.tf b/examples/resources/vantage_segment/resource.tf index 13adc96..181815c 100644 --- a/examples/resources/vantage_segment/resource.tf +++ b/examples/resources/vantage_segment/resource.tf @@ -1,6 +1,6 @@ resource "vantage_segment" "demo_segment" { title = "Demo Segment" - description = "This is a demo segment" + description = "This is still a demo segment" priority = 100 track_unallocated = false filter = "(costs.provider = 'aws' AND tags.name = NULL)" diff --git a/go.mod b/go.mod index 214e404..146ef9a 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,17 @@ 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/ryboe/q v1.0.20 github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20230919190050-ab8d2b0a3644 - github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240109125809-53d58864d5f5 + github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240111221141-32a3e121d962 ) require ( @@ -51,6 +54,8 @@ require ( github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/josharian/intern v1.0.0 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect @@ -63,6 +68,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 @@ -74,7 +80,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 @@ -84,5 +90,3 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace github.com/vantage-sh/vantage-go/vantagev2 => ../vantage-go/vantagev2 diff --git a/go.sum b/go.sum index c9d0a34..30ebc12 100644 --- a/go.sum +++ b/go.sum @@ -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= @@ -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= @@ -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= @@ -250,6 +253,7 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -261,12 +265,17 @@ 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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +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/ryboe/q v1.0.20 h1:FDaGYR2WrXMrWFzklRXWJZvhAPQr07SMLVf3bCAGhVQ= +github.com/ryboe/q v1.0.20/go.mod h1:IiqlbBPRrComXDcFXCKyIGle2yPqmgPKLJAMJQZjcgA= 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= @@ -293,9 +302,14 @@ 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-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-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/vantagev2 v0.0.0-20240111221141-32a3e121d962 h1:nqBcO/aTjl5rlXav03prTPQYRPtEj0PpmBaudHwOTec= +github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240111221141-32a3e121d962/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= @@ -329,6 +343,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= @@ -347,8 +362,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= diff --git a/vantage/segment_resource.go b/vantage/segment_resource.go index d3daf34..0078068 100644 --- a/vantage/segment_resource.go +++ b/vantage/segment_resource.go @@ -2,6 +2,7 @@ package vantage import ( "context" + "strconv" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -99,7 +100,7 @@ func (r SegmentResource) Create(ctx context.Context, req resource.CreateRequest, Title: data.Title.ValueStringPointer(), Filter: data.Filter.ValueString(), ParentSegmentToken: data.ParentSegmentToken.ValueString(), - Priority: data.Priority.ValueInt64(), + Priority: strconv.FormatInt(data.Priority.ValueInt64(), 10), WorkspaceToken: data.WorkspaceToken.ValueString(), TrackUnallocated: data.TrackUnallocated.ValueBool(), } @@ -142,11 +143,13 @@ func (r SegmentResource) Read(ctx context.Context, req resource.ReadRequest, res 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.TrackUnallocated = types.BoolValue(out.Payload.TrackUnallocated) resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) } @@ -158,6 +161,7 @@ func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, return } + params := segmentsv2.NewUpdateSegmentParams() params.SetSegmentToken(data.Token.ValueString()) @@ -170,6 +174,7 @@ func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, TrackUnallocated: data.TrackUnallocated.ValueBool(), } params.WithSegments(model) + out, err := r.client.V2.Segments.UpdateSegment(params, r.client.Auth) if err != nil { @@ -177,12 +182,17 @@ func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, return } + if params.Segments.TrackUnallocated != out.Payload.TrackUnallocated { + panic("response from API doesn't match request") + } + 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.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)...) } From 83633109863203dd9e9eb901985a1735dbbc17e8 Mon Sep 17 00:00:00 2001 From: Lee Briggs Date: Thu, 18 Jan 2024 10:58:51 -0800 Subject: [PATCH 3/4] update vantage-go --- examples/resources/vantage_segment/resource.tf | 2 +- go.mod | 5 +---- go.sum | 12 ++++-------- vantage/segment_resource.go | 17 +++++++---------- 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/examples/resources/vantage_segment/resource.tf b/examples/resources/vantage_segment/resource.tf index 181815c..35646ad 100644 --- a/examples/resources/vantage_segment/resource.tf +++ b/examples/resources/vantage_segment/resource.tf @@ -1,7 +1,7 @@ resource "vantage_segment" "demo_segment" { title = "Demo Segment" description = "This is still a demo segment" - priority = 100 + priority = 50 track_unallocated = false filter = "(costs.provider = 'aws' AND tags.name = NULL)" } diff --git a/go.mod b/go.mod index 146ef9a..84b70c4 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,8 @@ require ( 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/ryboe/q v1.0.20 github.com/vantage-sh/vantage-go/vantagev1 v0.0.0-20230919190050-ab8d2b0a3644 - github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240111221141-32a3e121d962 + github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240118182140-65ef80032d05 ) require ( @@ -54,8 +53,6 @@ require ( github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect diff --git a/go.sum b/go.sum index 30ebc12..40b8431 100644 --- a/go.sum +++ b/go.sum @@ -253,7 +253,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -265,13 +264,10 @@ 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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= 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/ryboe/q v1.0.20 h1:FDaGYR2WrXMrWFzklRXWJZvhAPQr07SMLVf3bCAGhVQ= -github.com/ryboe/q v1.0.20/go.mod h1:IiqlbBPRrComXDcFXCKyIGle2yPqmgPKLJAMJQZjcgA= 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= @@ -306,10 +302,10 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= 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-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/vantagev2 v0.0.0-20240111221141-32a3e121d962 h1:nqBcO/aTjl5rlXav03prTPQYRPtEj0PpmBaudHwOTec= -github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240111221141-32a3e121d962/go.mod h1:Vd7Orkt/F7kQIyHSNVgwGvsC+kJlUJPfIMg8q8+n9zI= +github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240117154108-ee1cf623e9e3 h1:NF/QX4XfYVkCaBxViAakV8eO7CEBb0w+SWhWTkUnH2k= +github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240117154108-ee1cf623e9e3/go.mod h1:Vd7Orkt/F7kQIyHSNVgwGvsC+kJlUJPfIMg8q8+n9zI= +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= diff --git a/vantage/segment_resource.go b/vantage/segment_resource.go index 0078068..4ccab22 100644 --- a/vantage/segment_resource.go +++ b/vantage/segment_resource.go @@ -2,7 +2,6 @@ package vantage import ( "context" - "strconv" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -100,9 +99,9 @@ func (r SegmentResource) Create(ctx context.Context, req resource.CreateRequest, Title: data.Title.ValueStringPointer(), Filter: data.Filter.ValueString(), ParentSegmentToken: data.ParentSegmentToken.ValueString(), - Priority: strconv.FormatInt(data.Priority.ValueInt64(), 10), + Priority: int32(data.Priority.ValueInt64()), WorkspaceToken: data.WorkspaceToken.ValueString(), - TrackUnallocated: data.TrackUnallocated.ValueBool(), + TrackUnallocated: data.TrackUnallocated.ValueBoolPointer(), } params.WithSegments(body) @@ -114,9 +113,10 @@ func (r SegmentResource) Create(ctx context.Context, req resource.CreateRequest, 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.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)...) @@ -149,6 +149,7 @@ func (r SegmentResource) Read(ctx context.Context, req resource.ReadRequest, res 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)...) @@ -170,8 +171,8 @@ func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, Filter: data.Filter.ValueString(), ParentSegmentToken: data.ParentSegmentToken.ValueString(), Description: data.Description.ValueString(), - //Priority: data.Priority.ValueInt64(), FIXME: this is not supported in the API - TrackUnallocated: data.TrackUnallocated.ValueBool(), + Priority: int32(data.Priority.ValueInt64()), + TrackUnallocated: data.TrackUnallocated.ValueBoolPointer(), } params.WithSegments(model) @@ -182,10 +183,6 @@ func (r SegmentResource) Update(ctx context.Context, req resource.UpdateRequest, return } - if params.Segments.TrackUnallocated != out.Payload.TrackUnallocated { - panic("response from API doesn't match request") - } - 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? From 24bc124a466630d5d20d142ca510ef52d3f50f10 Mon Sep 17 00:00:00 2001 From: Lee Briggs Date: Thu, 18 Jan 2024 11:00:50 -0800 Subject: [PATCH 4/4] update --- go.sum | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.sum b/go.sum index 40b8431..c587e78 100644 --- a/go.sum +++ b/go.sum @@ -302,8 +302,6 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= 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-20240117154108-ee1cf623e9e3 h1:NF/QX4XfYVkCaBxViAakV8eO7CEBb0w+SWhWTkUnH2k= -github.com/vantage-sh/vantage-go/vantagev2 v0.0.0-20240117154108-ee1cf623e9e3/go.mod h1:Vd7Orkt/F7kQIyHSNVgwGvsC+kJlUJPfIMg8q8+n9zI= 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=