enforce recreation of resources after field change

This commit is contained in:
Manuel Ganter 2025-11-12 12:17:12 +01:00
parent f6f8dc17c1
commit 39b88941a6
No known key found for this signature in database
2 changed files with 68 additions and 8 deletions

View file

@ -8,6 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier"
"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"
@ -70,34 +71,58 @@ func (r *AppResource) Schema(ctx context.Context, req resource.SchemaRequest, re
"name": schema.StringAttribute{
MarkdownDescription: "App name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"app_version": schema.StringAttribute{
MarkdownDescription: "App version",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"organization": schema.StringAttribute{
MarkdownDescription: "Organization name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"manifest": schema.StringAttribute{
MarkdownDescription: "Kubernetes manifest YAML content",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"region": schema.StringAttribute{
MarkdownDescription: "Region (e.g., US, EU)",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"cloudlet_org": schema.StringAttribute{
MarkdownDescription: "Cloudlet organization",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"cloudlet_name": schema.StringAttribute{
MarkdownDescription: "Cloudlet name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"flavor_name": schema.StringAttribute{
MarkdownDescription: "Flavor name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
},
Blocks: map[string]schema.Block{
@ -111,18 +136,30 @@ func (r *AppResource) Schema(ctx context.Context, req resource.SchemaRequest, re
"protocol": schema.StringAttribute{
MarkdownDescription: "Protocol (tcp, udp, icmp)",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"port_range_min": schema.Int64Attribute{
MarkdownDescription: "Minimum port number",
Required: true,
PlanModifiers: []planmodifier.Int64{
int64planmodifier.RequiresReplace(),
},
},
"port_range_max": schema.Int64Attribute{
MarkdownDescription: "Maximum port number",
Required: true,
PlanModifiers: []planmodifier.Int64{
int64planmodifier.RequiresReplace(),
},
},
"remote_cidr": schema.StringAttribute{
MarkdownDescription: "Remote CIDR (e.g., 0.0.0.0/0)",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
},
},

View file

@ -60,42 +60,65 @@ func (r *AppInstanceResource) Schema(ctx context.Context, req resource.SchemaReq
"name": schema.StringAttribute{
MarkdownDescription: "AppInstance name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"organization": schema.StringAttribute{
MarkdownDescription: "Organization name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"region": schema.StringAttribute{
MarkdownDescription: "Region (e.g., US, EU)",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"cloudlet_org": schema.StringAttribute{
MarkdownDescription: "Cloudlet organization",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"cloudlet_name": schema.StringAttribute{
MarkdownDescription: "Cloudlet name",
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"app_name": schema.StringAttribute{
MarkdownDescription: "Application name",
Required: false,
Optional: true,
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"app_version": schema.StringAttribute{
MarkdownDescription: "Application version",
Required: false,
Optional: true,
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"app_organization": schema.StringAttribute{
MarkdownDescription: "Application organization",
Required: false,
Optional: true,
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"flavor_name": schema.StringAttribute{
MarkdownDescription: "Flavor name",
Required: false,
Optional: true,
Required: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.RequiresReplace(),
},
},
"state": schema.StringAttribute{
MarkdownDescription: "AppInstance state",