1+ package minikube
2+
3+ import (
4+ "context"
5+ "sync"
6+
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"
12+ "github.com/scott-the-programmer/terraform-provider-minikube/minikube/lib"
13+ )
14+
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
24+ }
25+
26+ // MinikubeProviderModel describes the provider data model.
27+ type MinikubeProviderModel struct {
28+ KubernetesVersion types.String `tfsdk:"kubernetes_version"`
29+ }
30+
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 ,
43+ },
44+ },
45+ }
46+ }
47+
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 )... )
52+
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
64+ mutex := & sync.Mutex {}
65+ minikubeClientFactory := func () (lib.ClusterClient , error ) {
66+ return & lib.MinikubeClient {
67+ TfCreationLock : mutex ,
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
85+ }
86+ }
87+
88+ func NewFrameworkProvider (version string ) func () provider.Provider {
89+ return func () provider.Provider {
90+ return & MinikubeProvider {
91+ version : version ,
92+ }
93+ }
94+ }
0 commit comments