@@ -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+ }
0 commit comments