Skip to content

Commit 6ca65b4

Browse files
Complete Plugin Framework migration - clean up and replace old SDK v2 files
Co-authored-by: scott-the-programmer <[email protected]>
1 parent be38100 commit 6ca65b4

File tree

6 files changed

+596
-1101
lines changed

6 files changed

+596
-1101
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/hashicorp/terraform-plugin-docs v0.21.0
1010
github.com/hashicorp/terraform-plugin-framework v1.15.0
1111
github.com/hashicorp/terraform-plugin-log v0.9.0
12-
github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0
12+
github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 // Keep for existing utilities and tests
1313
github.com/spf13/viper v1.20.1
1414
github.com/stretchr/testify v1.10.0
1515
k8s.io/klog/v2 v2.130.1

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func main() {
3535
Debug: debug,
3636
}
3737

38-
err := providerserver.Serve(context.Background(), minikube.NewFrameworkProvider(version), opts)
38+
err := providerserver.Serve(context.Background(), minikube.NewProvider(version), opts)
3939

4040
if err != nil {
4141
log.Fatal(err.Error())

minikube/provider.go

Lines changed: 74 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,96 @@ import (
44
"context"
55
"sync"
66

7-
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7+
"github.com/hashicorp/terraform-plugin-framework/datasource"
8+
"github.com/hashicorp/terraform-plugin-framework/provider"
9+
"github.com/hashicorp/terraform-plugin-framework/provider/schema"
10+
"github.com/hashicorp/terraform-plugin-framework/resource"
11+
"github.com/hashicorp/terraform-plugin-framework/types"
912
"github.com/scott-the-programmer/terraform-provider-minikube/minikube/lib"
1013
)
1114

12-
func init() {
13-
schema.DescriptionKind = schema.StringMarkdown
15+
// Ensure provider defined types fully satisfy framework interfaces.
16+
var _ provider.Provider = &MinikubeProvider{}
17+
18+
// MinikubeProvider defines the provider implementation.
19+
type MinikubeProvider struct {
20+
// version is set to the provider version on release, "dev" when the
21+
// provider is built and ran locally, and "test" when running acceptance
22+
// testing.
23+
version string
1424
}
1525

16-
func Provider() *schema.Provider {
17-
return NewProvider(providerConfigure)
26+
// MinikubeProviderModel describes the provider data model.
27+
type MinikubeProviderModel struct {
28+
KubernetesVersion types.String `tfsdk:"kubernetes_version"`
1829
}
1930

20-
func NewProvider(providerConfigure schema.ConfigureContextFunc) *schema.Provider {
21-
return &schema.Provider{
22-
ResourcesMap: map[string]*schema.Resource{
23-
"minikube_cluster": ResourceCluster(),
24-
},
25-
DataSourcesMap: map[string]*schema.Resource{},
26-
ConfigureContextFunc: providerConfigure,
27-
Schema: map[string]*schema.Schema{
28-
"kubernetes_version": {
29-
Type: schema.TypeString,
30-
Optional: true,
31-
Description: "The Kubernetes version that the minikube VM will use. Defaults to 'v1.30.0'.",
32-
Default: "v1.30.0",
31+
func (p *MinikubeProvider) Metadata(ctx context.Context, req provider.MetadataRequest, resp *provider.MetadataResponse) {
32+
resp.TypeName = "minikube"
33+
resp.Version = p.version
34+
}
35+
36+
func (p *MinikubeProvider) Schema(ctx context.Context, req provider.SchemaRequest, resp *provider.SchemaResponse) {
37+
resp.Schema = schema.Schema{
38+
MarkdownDescription: "Minikube provider for Terraform",
39+
Attributes: map[string]schema.Attribute{
40+
"kubernetes_version": schema.StringAttribute{
41+
MarkdownDescription: "The Kubernetes version that the minikube VM will use. Defaults to 'v1.30.0'.",
42+
Optional: true,
3343
},
3444
},
3545
}
3646
}
3747

38-
func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
39-
var diags diag.Diagnostics
48+
func (p *MinikubeProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
49+
var data MinikubeProviderModel
50+
51+
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
4052

53+
if resp.Diagnostics.HasError() {
54+
return
55+
}
56+
57+
// Set default kubernetes version if not provided
58+
k8sVersion := "v1.30.0"
59+
if !data.KubernetesVersion.IsNull() {
60+
k8sVersion = data.KubernetesVersion.ValueString()
61+
}
62+
63+
// Create the client factory function
4164
mutex := &sync.Mutex{}
42-
k8sVersion := d.Get("kubernetes_version").(string)
4365
minikubeClientFactory := func() (lib.ClusterClient, error) {
4466
return &lib.MinikubeClient{
4567
TfCreationLock: mutex,
46-
K8sVersion: k8sVersion}, nil
68+
K8sVersion: k8sVersion,
69+
}, nil
70+
}
71+
72+
resp.DataSourceData = minikubeClientFactory
73+
resp.ResourceData = minikubeClientFactory
74+
}
75+
76+
func (p *MinikubeProvider) Resources(ctx context.Context) []func() resource.Resource {
77+
return []func() resource.Resource{
78+
NewClusterResource,
79+
}
80+
}
81+
82+
func (p *MinikubeProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
83+
return []func() datasource.DataSource{
84+
// Define data sources here
4785
}
48-
return minikubeClientFactory, diags
4986
}
87+
88+
func NewProvider(version string) func() provider.Provider {
89+
return func() provider.Provider {
90+
return &MinikubeProvider{
91+
version: version,
92+
}
93+
}
94+
}
95+
96+
// For backward compatibility with the old SDK name
97+
func Provider() func() provider.Provider {
98+
return NewProvider("dev")
99+
}

minikube/provider_framework.go

Lines changed: 0 additions & 94 deletions
This file was deleted.

0 commit comments

Comments
 (0)