@@ -44,6 +44,7 @@ type DatasetResourceModel struct {
4444 Name types.String `tfsdk:"name"`
4545 Kind types.String `tfsdk:"kind"`
4646 Description types.String `tfsdk:"description"`
47+ EdgeDeployment types.String `tfsdk:"edge_deployment"`
4748 ID types.String `tfsdk:"id"`
4849 UseRetentionPeriod types.Bool `tfsdk:"use_retention_period"`
4950 RetentionDays types.Int64 `tfsdk:"retention_days"`
@@ -90,6 +91,14 @@ func (r *DatasetResource) Schema(_ context.Context, _ resource.SchemaRequest, re
9091 stringplanmodifier .UseStateForUnknown (),
9192 },
9293 },
94+ "edge_deployment" : schema.StringAttribute {
95+ Optional : true ,
96+ Computed : true ,
97+ MarkdownDescription : "Edge deployment for the dataset (for example, 'cloud.eu-central-1.aws')" ,
98+ PlanModifiers : []planmodifier.String {
99+ stringplanmodifier .UseStateForUnknown (),
100+ },
101+ },
93102 "id" : schema.StringAttribute {
94103 Computed : true ,
95104 MarkdownDescription : "Dataset identifier" ,
@@ -170,20 +179,20 @@ func (r *DatasetResource) Create(ctx context.Context, req resource.CreateRequest
170179 return
171180 }
172181
173- ds , err := r .client .Datasets .Create (ctx , axiom.DatasetCreateRequest {
174- Name : plan .Name .ValueString (),
175- Kind : plan .Kind .ValueString (),
176- Description : plan .Description .ValueString (),
177- UseRetentionPeriod : plan .UseRetentionPeriod .ValueBool (),
178- RetentionDays : int (plan .RetentionDays .ValueInt64 ()),
179- })
182+ ds , err := r .client .Datasets .Create (ctx , datasetCreateRequestFromPlan (plan ))
180183 if err != nil {
181184 resp .Diagnostics .AddError ("Client Error" , fmt .Sprintf ("Unable to create dataset, got error: %s" , err ))
182185 return
183186 }
184187
188+ state , err := flattenDatasetWithOrgDefault (ctx , r .client , ds )
189+ if err != nil {
190+ resp .Diagnostics .AddWarning ("Unable to resolve default edge deployment" , err .Error ())
191+ state = flattenDataset (ds , "" )
192+ }
193+
185194 // Set state immediately after creation to avoid orphaned resources
186- resp .Diagnostics .Append (resp .State .Set (ctx , flattenDataset ( ds ) )... )
195+ resp .Diagnostics .Append (resp .State .Set (ctx , state )... )
187196 if resp .Diagnostics .HasError () {
188197 return
189198 }
@@ -203,7 +212,14 @@ func (r *DatasetResource) Create(ctx context.Context, req resource.CreateRequest
203212 }
204213
205214 ds .MapFields = resMapFields
206- resp .Diagnostics .Append (resp .State .Set (ctx , flattenDataset (ds ))... )
215+
216+ state , err := flattenDatasetWithOrgDefault (ctx , r .client , ds )
217+ if err != nil {
218+ resp .Diagnostics .AddWarning ("Unable to resolve default edge deployment" , err .Error ())
219+ state = flattenDataset (ds , "" )
220+ }
221+
222+ resp .Diagnostics .Append (resp .State .Set (ctx , state )... )
207223 }
208224}
209225
@@ -229,7 +245,13 @@ func (r *DatasetResource) Read(ctx context.Context, req resource.ReadRequest, re
229245 return
230246 }
231247
232- resp .Diagnostics .Append (resp .State .Set (ctx , flattenDataset (ds ))... )
248+ state , err := flattenDatasetWithOrgDefault (ctx , r .client , ds )
249+ if err != nil {
250+ resp .Diagnostics .AddWarning ("Unable to resolve default edge deployment" , err .Error ())
251+ state = flattenDataset (ds , "" )
252+ }
253+
254+ resp .Diagnostics .Append (resp .State .Set (ctx , state )... )
233255}
234256
235257func (r * DatasetResource ) Update (ctx context.Context , req resource.UpdateRequest , resp * resource.UpdateResponse ) {
@@ -260,8 +282,14 @@ func (r *DatasetResource) Update(ctx context.Context, req resource.UpdateRequest
260282 return
261283 }
262284
285+ state , err := flattenDatasetWithOrgDefault (ctx , r .client , ds )
286+ if err != nil {
287+ resp .Diagnostics .AddWarning ("Unable to resolve default edge deployment" , err .Error ())
288+ state = flattenDataset (ds , "" )
289+ }
290+
263291 // Set state immediately after update to preserve changes
264- resp .Diagnostics .Append (resp .State .Set (ctx , flattenDataset ( ds ) )... )
292+ resp .Diagnostics .Append (resp .State .Set (ctx , state )... )
265293 if resp .Diagnostics .HasError () {
266294 return
267295 }
@@ -281,7 +309,14 @@ func (r *DatasetResource) Update(ctx context.Context, req resource.UpdateRequest
281309 }
282310
283311 ds .MapFields = resMapFields
284- resp .Diagnostics .Append (resp .State .Set (ctx , flattenDataset (ds ))... )
312+
313+ state , err := flattenDatasetWithOrgDefault (ctx , r .client , ds )
314+ if err != nil {
315+ resp .Diagnostics .AddWarning ("Unable to resolve default edge deployment" , err .Error ())
316+ state = flattenDataset (ds , "" )
317+ }
318+
319+ resp .Diagnostics .Append (resp .State .Set (ctx , state )... )
285320 }
286321}
287322
@@ -303,13 +338,20 @@ func (r *DatasetResource) ImportState(ctx context.Context, req resource.ImportSt
303338 resource .ImportStatePassthroughID (ctx , path .Root ("id" ), req , resp )
304339}
305340
306- func flattenDataset (dataset * axiom.Dataset ) DatasetResourceModel {
341+ func flattenDataset (dataset * axiom.Dataset , defaultEdgeDeployment string ) DatasetResourceModel {
307342 var description types.String
343+ var edgeDeployment types.String
308344
309345 if dataset .Description != "" {
310346 description = types .StringValue (dataset .Description )
311347 }
312348
349+ if dataset .EdgeDeployment != "" {
350+ edgeDeployment = types .StringValue (dataset .EdgeDeployment )
351+ } else if defaultEdgeDeployment != "" {
352+ edgeDeployment = types .StringValue (defaultEdgeDeployment )
353+ }
354+
313355 mapFields := make ([]attr.Value , 0 , len (dataset .MapFields ))
314356 for _ , fieldName := range dataset .MapFields {
315357 mapFields = append (mapFields , types .StringValue (fieldName ))
@@ -320,8 +362,66 @@ func flattenDataset(dataset *axiom.Dataset) DatasetResourceModel {
320362 Name : types .StringValue (dataset .Name ),
321363 Kind : types .StringValue (dataset .Kind ),
322364 Description : description ,
365+ EdgeDeployment : edgeDeployment ,
323366 UseRetentionPeriod : types .BoolValue (dataset .UseRetentionPeriod ),
324367 RetentionDays : types .Int64Value (int64 (dataset .RetentionDays )),
325368 MapFields : types .ListValueMust (types .StringType , mapFields ),
326369 }
327370}
371+
372+ func datasetCreateRequestFromPlan (plan DatasetResourceModel ) axiom.DatasetCreateRequest {
373+ return axiom.DatasetCreateRequest {
374+ Name : plan .Name .ValueString (),
375+ Kind : plan .Kind .ValueString (),
376+ Description : plan .Description .ValueString (),
377+ EdgeDeployment : edgeDeploymentValue (plan .EdgeDeployment ),
378+ UseRetentionPeriod : plan .UseRetentionPeriod .ValueBool (),
379+ RetentionDays : int (plan .RetentionDays .ValueInt64 ()),
380+ }
381+ }
382+
383+ func edgeDeploymentValue (edgeDeployment types.String ) string {
384+ if edgeDeployment .IsNull () || edgeDeployment .IsUnknown () {
385+ return ""
386+ }
387+
388+ return edgeDeployment .ValueString ()
389+ }
390+
391+ func flattenDatasetWithOrgDefault (ctx context.Context , client * axiom.Client , dataset * axiom.Dataset ) (DatasetResourceModel , error ) {
392+ if dataset .EdgeDeployment != "" {
393+ return flattenDataset (dataset , "" ), nil
394+ }
395+
396+ defaultEdgeDeployment , err := fetchDefaultEdgeDeployment (ctx , client )
397+ if err != nil {
398+ return DatasetResourceModel {}, err
399+ }
400+
401+ return flattenDataset (dataset , defaultEdgeDeployment ), nil
402+ }
403+
404+ func fetchDefaultEdgeDeployment (ctx context.Context , client * axiom.Client ) (string , error ) {
405+ if client == nil {
406+ return "" , fmt .Errorf ("client is not set" )
407+ }
408+
409+ organizations , err := client .Organizations .List (ctx )
410+ if err != nil {
411+ return "" , fmt .Errorf ("could not fetch organizations while resolving edge deployment: %w" , err )
412+ }
413+
414+ return selectDefaultEdgeDeployment (organizations ), nil
415+ }
416+
417+ func selectDefaultEdgeDeployment (organizations []* axiom.Organization ) string {
418+ for _ , organization := range organizations {
419+ if organization == nil || organization .DefaultEdgeDeployment == "" {
420+ continue
421+ }
422+
423+ return organization .DefaultEdgeDeployment
424+ }
425+
426+ return ""
427+ }
0 commit comments