// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package provider import ( "context" "fmt" "github.com/hashicorp/terraform-plugin-framework/types" "net/http" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" ) // Ensure provider defined types fully satisfy framework interfaces. var _ resource.Resource = &VirtfusionNetworkBlockResource{} var _ resource.ResourceWithImportState = &VirtfusionNetworkBlockResource{} func NewVirtfusionNetworkBlockResource() resource.Resource { return &VirtfusionNetworkBlockResource{} } // VirtfusionNetworkBlockResource defines the resource implementation. type VirtfusionNetworkBlockResource struct { client *http.Client } // VirtfusionNetworkBlockResourceModel describes the resource data model. type VirtfusionNetworkBlockResourceModel struct { Id types.Int64 `tfsdk:"id" json:"id,omitempty"` Name *string `tfsdk:"name" json:"name"` NetworkType *int64 `tfsdk:"network_type" json:"type"` } func (r *VirtfusionNetworkBlockResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { resp.TypeName = req.ProviderTypeName + "_network_block" } func (r *VirtfusionNetworkBlockResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { resp.Schema = schema.Schema{ // This description is used by the documentation generator and the language server. MarkdownDescription: "Virtfusion Network Block Resource", Attributes: map[string]schema.Attribute{}, } } func (r *VirtfusionNetworkBlockResource) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) { // Prevent panic if the provider has not been configured. if req.ProviderData == nil { return } client, ok := req.ProviderData.(*http.Client) if !ok { resp.Diagnostics.AddError( "Unexpected Resource Configure Type", fmt.Sprintf("Expected *http.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData), ) return } r.client = client } func (r *VirtfusionNetworkBlockResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { var data VirtfusionNetworkBlockResourceModel // Read Terraform plan data into the model resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return } resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } func (r *VirtfusionNetworkBlockResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { var data VirtfusionNetworkBlockResourceModel // Read Terraform prior state data into the model resp.Diagnostics.Append(req.State.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return } // Save updated data into Terraform state resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } func (r *VirtfusionNetworkBlockResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { var data VirtfusionNetworkBlockResourceModel // Read Terraform plan data into the model resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return } // Save updated data into Terraform state resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } func (r *VirtfusionNetworkBlockResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { var data VirtfusionNetworkBlockResourceModel // Read Terraform prior state data into the model resp.Diagnostics.Append(req.State.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return } resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } func (r *VirtfusionNetworkBlockResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) }