@@ -3,6 +3,7 @@ package provider
33import (
44 "context"
55 "fmt"
6+ "strings"
67
78 dtrack "github.com/DependencyTrack/client-go"
89 "github.com/hashicorp/terraform-plugin-framework/attr"
@@ -174,7 +175,7 @@ func (r *projectResource) Create(ctx context.Context, req resource.CreateRequest
174175 }
175176 }
176177 if ! plan .Tags .IsUnknown () && ! plan .Tags .IsNull () {
177- strings , err := GetStringList (ctx , & resp .Diagnostics , plan .Tags )
178+ tagStrings , err := GetStringList (ctx , & resp .Diagnostics , plan .Tags )
178179 if resp .Diagnostics .HasError () {
179180 return
180181 }
@@ -186,7 +187,7 @@ func (r *projectResource) Create(ctx context.Context, req resource.CreateRequest
186187 )
187188 return
188189 }
189- projectReq .Tags = Map (strings , func (item string ) dtrack.Tag { return dtrack.Tag {Name : item } })
190+ projectReq .Tags = Map (tagStrings , func (item string ) dtrack.Tag { return dtrack.Tag {Name : item } })
190191 }
191192 if plan .Active .IsUnknown () {
192193 projectReq .Active = true
@@ -228,7 +229,13 @@ func (r *projectResource) Create(ctx context.Context, req resource.CreateRequest
228229 )
229230 return
230231 }
231- tagValueList := Map (projectRes .Tags , func (tag dtrack.Tag ) attr.Value {
232+ resTags := projectRes .Tags
233+ if SliceUnorderedEqual (projectReq .Tags , projectRes .Tags , func (req , res dtrack.Tag ) int {
234+ return strings .Compare (req .Name , res .Name )
235+ }) {
236+ resTags = projectReq .Tags
237+ }
238+ tagValueList := Map (resTags , func (tag dtrack.Tag ) attr.Value {
232239 return types .StringValue (tag .Name )
233240 })
234241 tagList , diags := types .ListValue (types .StringType , tagValueList )
@@ -337,9 +344,20 @@ func (r *projectResource) Read(ctx context.Context, req resource.ReadRequest, re
337344 return
338345 }
339346
340- tagValueList := Map (project .Tags , func (tag dtrack.Tag ) attr.Value {
341- return types .StringValue (tag .Name )
342- })
347+ stateTags , err := GetStringList (ctx , & resp .Diagnostics , state .Tags )
348+ if err != nil {
349+ resp .Diagnostics .AddError (
350+ "Unable to load current tags on project" ,
351+ "Error with transforming stored tags on project: " + id .String ()+ ", in original error: " + err .Error (),
352+ )
353+ return
354+ }
355+ returnedTags := Map (project .Tags , func (tag dtrack.Tag ) string { return tag .Name })
356+ newStateTags := returnedTags
357+ if SliceUnorderedEqual (stateTags , returnedTags , strings .Compare ) {
358+ newStateTags = stateTags
359+ }
360+ tagValueList := Map (newStateTags , func (name string ) attr.Value { return types .StringValue (name ) })
343361 tagList , diags := types .ListValue (types .StringType , tagValueList )
344362 resp .Diagnostics .Append (diags ... )
345363 if resp .Diagnostics .HasError () {
0 commit comments