From 72004879b1cf3e659bdfdb5c6d493992595489bc Mon Sep 17 00:00:00 2001 From: HenryEstberg <11286201+HenryEstberg@users.noreply.github.com> Date: Mon, 6 May 2024 14:45:24 -0700 Subject: [PATCH] Consolidated reading output values into a function --- .../waypoint/data_source_waypoint_add_on.go | 26 +---- .../waypoint/resource_waypoint_add_on.go | 106 +++++++----------- 2 files changed, 44 insertions(+), 88 deletions(-) diff --git a/internal/provider/waypoint/data_source_waypoint_add_on.go b/internal/provider/waypoint/data_source_waypoint_add_on.go index a9e86f094..62f5a50e2 100644 --- a/internal/provider/waypoint/data_source_waypoint_add_on.go +++ b/internal/provider/waypoint/data_source_waypoint_add_on.go @@ -269,28 +269,10 @@ func (d *DataSourceAddOn) Read(ctx context.Context, req datasource.ReadRequest, } } - if addOn.OutputValues != nil { - outputList := make([]*outputValue, len(addOn.OutputValues)) - for i, outputVal := range addOn.OutputValues { - output := &outputValue{ - Name: types.StringValue(outputVal.Name), - Type: types.StringValue(outputVal.Type), - Value: types.StringValue(outputVal.Value), - Sensitive: types.BoolValue(outputVal.Sensitive), - } - outputList[i] = output - } - if len(outputList) > 0 || len(outputList) != len(state.OutputValues.Elements()) { - state.OutputValues, diags = types.ListValueFrom(ctx, types.ObjectType{AttrTypes: outputValue{}.attrTypes()}, outputList) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { - return - } - } else { - state.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) - } - } else { - state.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + diags = ReadOutputs(ctx, addOn, &state) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return } resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) diff --git a/internal/provider/waypoint/resource_waypoint_add_on.go b/internal/provider/waypoint/resource_waypoint_add_on.go index 0ad6d2884..e52b2cc18 100644 --- a/internal/provider/waypoint/resource_waypoint_add_on.go +++ b/internal/provider/waypoint/resource_waypoint_add_on.go @@ -12,6 +12,7 @@ import ( "github.com/hashicorp/hcp-sdk-go/clients/cloud-waypoint-service/preview/2023-08-18/client/waypoint_service" waypointmodels "github.com/hashicorp/hcp-sdk-go/clients/cloud-waypoint-service/preview/2023-08-18/models" "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -387,28 +388,10 @@ func (r *AddOnResource) Create(ctx context.Context, req resource.CreateRequest, plan.Count = types.Int64Value(installedCount) } - if addOn.OutputValues != nil { - outputList := make([]*outputValue, len(addOn.OutputValues)) - for i, outputVal := range addOn.OutputValues { - output := &outputValue{ - Name: types.StringValue(outputVal.Name), - Type: types.StringValue(outputVal.Type), - Value: types.StringValue(outputVal.Value), - Sensitive: types.BoolValue(outputVal.Sensitive), - } - outputList[i] = output - } - if len(outputList) > 0 || len(outputList) != len(plan.OutputValues.Elements()) { - plan.OutputValues, diags = types.ListValueFrom(ctx, types.ObjectType{AttrTypes: outputValue{}.attrTypes()}, outputList) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { - return - } - } else { - plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) - } - } else { - plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + diags = ReadOutputs(ctx, addOn, plan) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return } // Write logs using the tflog package @@ -519,28 +502,10 @@ func (r *AddOnResource) Read(ctx context.Context, req resource.ReadRequest, resp } } - if addOn.OutputValues != nil { - outputList := make([]*outputValue, len(addOn.OutputValues)) - for i, outputVal := range addOn.OutputValues { - output := &outputValue{ - Name: types.StringValue(outputVal.Name), - Type: types.StringValue(outputVal.Type), - Value: types.StringValue(outputVal.Value), - Sensitive: types.BoolValue(outputVal.Sensitive), - } - outputList[i] = output - } - if len(outputList) > 0 || len(outputList) != len(state.OutputValues.Elements()) { - state.OutputValues, diags = types.ListValueFrom(ctx, types.ObjectType{AttrTypes: outputValue{}.attrTypes()}, outputList) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { - return - } - } else { - state.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) - } - } else { - state.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + diags = ReadOutputs(ctx, addOn, state) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return } resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) @@ -666,28 +631,10 @@ func (r *AddOnResource) Update(ctx context.Context, req resource.UpdateRequest, plan.Count = types.Int64Value(installedCount) } - if addOn.OutputValues != nil { - outputList := make([]*outputValue, len(addOn.OutputValues)) - for i, outputVal := range addOn.OutputValues { - output := &outputValue{ - Name: types.StringValue(outputVal.Name), - Type: types.StringValue(outputVal.Type), - Value: types.StringValue(outputVal.Value), - Sensitive: types.BoolValue(outputVal.Sensitive), - } - outputList[i] = output - } - if len(outputList) > 0 || len(outputList) != len(plan.OutputValues.Elements()) { - plan.OutputValues, diags = types.ListValueFrom(ctx, types.ObjectType{AttrTypes: outputValue{}.attrTypes()}, outputList) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { - return - } - } else { - plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) - } - } else { - plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + diags = ReadOutputs(ctx, addOn, plan) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return } // Write logs using the tflog package @@ -748,3 +695,30 @@ func (r *AddOnResource) Delete(ctx context.Context, req resource.DeleteRequest, func (r *AddOnResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) } + +func ReadOutputs(ctx context.Context, addOn *waypointmodels.HashicorpCloudWaypointAddOn, plan *AddOnResourceModel) diag.Diagnostics { + var diags diag.Diagnostics + if addOn.OutputValues != nil { + outputList := make([]*outputValue, len(addOn.OutputValues)) + for i, outputVal := range addOn.OutputValues { + output := &outputValue{ + Name: types.StringValue(outputVal.Name), + Type: types.StringValue(outputVal.Type), + Value: types.StringValue(outputVal.Value), + Sensitive: types.BoolValue(outputVal.Sensitive), + } + outputList[i] = output + } + if len(outputList) > 0 || len(outputList) != len(plan.OutputValues.Elements()) { + plan.OutputValues, diags = types.ListValueFrom(ctx, types.ObjectType{AttrTypes: outputValue{}.attrTypes()}, outputList) + if diags.HasError() { + return diags + } + } else { + plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + } + } else { + plan.OutputValues = types.ListNull(types.ObjectType{AttrTypes: outputValue{}.attrTypes()}) + } + return diags +}