From ca4461bbbb7eb45af57d745c0adecdadb53bc4c5 Mon Sep 17 00:00:00 2001 From: Pavan Kumar Sunkara Date: Mon, 19 Jun 2023 02:35:26 +0100 Subject: [PATCH] Use a modifier for calculating provisioner --- internal/provider/resource_project.go | 61 +++++++++++++++++++++------ 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/internal/provider/resource_project.go b/internal/provider/resource_project.go index 28bc51c..3e5ade4 100644 --- a/internal/provider/resource_project.go +++ b/internal/provider/resource_project.go @@ -76,6 +76,50 @@ type ProjectResourceModel struct { Branch types.Object `tfsdk:"branch"` } +func ProvisionerCalculator() planmodifier.String { + return provisionerCalculatorModifier{} +} + +type provisionerCalculatorModifier struct{} + +func (m provisionerCalculatorModifier) Description(_ context.Context) string { + return "This will be calculated based on compute units." +} + +func (m provisionerCalculatorModifier) MarkdownDescription(_ context.Context) string { + return "This will be calculated based on compute units." +} + +func (m provisionerCalculatorModifier) PlanModifyString(ctx context.Context, req planmodifier.StringRequest, resp *planmodifier.StringResponse) { + var data *ProjectResourceModel + var branchData *ProjectResourceBranchModel + var branchEndpointData *ProjectResourceBranchEndpointModel + + resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...) + + if resp.Diagnostics.HasError() { + return + } + + resp.Diagnostics.Append(data.Branch.As(ctx, &branchData, basetypes.ObjectAsOptions{})...) + + if resp.Diagnostics.HasError() { + return + } + + resp.Diagnostics.Append(branchData.Endpoint.As(ctx, &branchEndpointData, basetypes.ObjectAsOptions{})...) + + if resp.Diagnostics.HasError() { + return + } + + if branchEndpointData.MinCu == branchEndpointData.MaxCu { + resp.PlanValue = types.StringValue("k8s-pod") + } else { + resp.PlanValue = types.StringValue("k8s-neonvm") + } +} + func (r *ProjectResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { resp.TypeName = req.ProviderTypeName + "_project" } @@ -219,6 +263,9 @@ func (r *ProjectResource) Schema(ctx context.Context, req resource.SchemaRequest "provisioner": schema.StringAttribute{ MarkdownDescription: "Provisioner of the endpoint.", Computed: true, + PlanModifiers: []planmodifier.String{ + ProvisionerCalculator(), + }, }, }, }, @@ -286,12 +333,7 @@ func (r *ProjectResource) Create(ctx context.Context, req resource.CreateRequest input.Project.AutoscalingLimitMinCu = branchEndpointData.MinCu.ValueFloat64() input.Project.AutoscalingLimitMaxCu = branchEndpointData.MaxCu.ValueFloat64() - - if input.Project.AutoscalingLimitMinCu == input.Project.AutoscalingLimitMaxCu { - input.Project.Provisioner = "k8s-pod" - } else { - input.Project.Provisioner = "k8s-neonvm" - } + input.Project.Provisioner = branchEndpointData.Provisioner.ValueString() var project ProjectCreateOutput @@ -478,15 +520,10 @@ func (r *ProjectResource) Update(ctx context.Context, req resource.UpdateRequest Endpoint: EndpointUpdateInputEndpoint{ AutoscalingLimitMinCu: branchEndpointData.MinCu.ValueFloat64(), AutoscalingLimitMaxCu: branchEndpointData.MaxCu.ValueFloat64(), + Provisioner: branchEndpointData.Provisioner.ValueString(), }, } - if endpointInput.Endpoint.AutoscalingLimitMinCu == endpointInput.Endpoint.AutoscalingLimitMaxCu { - endpointInput.Endpoint.Provisioner = "k8s-pod" - } else { - endpointInput.Endpoint.Provisioner = "k8s-neonvm" - } - endpoint, err := endpointUpdate(r.client, data.Id.ValueString(), branchEndpointData.Id.ValueString(), endpointInput) if err != nil {