Skip to content

Commit 419b595

Browse files
refactor kubernetes version into provider (#3)
* refactor kubernetes version into provider * revert bad decrements * minor refactoring for easier tf doc generation * allow GetK8sVersion to be called multiple times * fix up schema in template
1 parent 2857966 commit 419b595

File tree

14 files changed

+117
-26
lines changed

14 files changed

+117
-26
lines changed

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ This requires _admin_ permissions
1616

1717
```bash
1818
minikube --vm=true --driver=hyperkit --download-only
19+
minikube --vm=true --driver=hyperv --download-only
1920
minikube --driver=docker --download-only
2021
```
2122

@@ -37,12 +38,13 @@ curl https://raw.githubusercontent.com/scott-the-programmer/terraform-provider-m
3738
## Usage
3839

3940
```terraform
40-
provider minikube {}
41+
provider minikube {
42+
kubernetes_version = "v1.23.3"
43+
}
4144
4245
resource "minikube_cluster" "cluster" {
4346
vm = true
4447
driver = "hyperkit"
45-
kubernetes_version = "v1.23.3"
4648
addons = [
4749
"dashboard",
4850
"default-storageclass",
@@ -65,4 +67,4 @@ You can use `minikube` to verify the cluster is up & running
6567

6668
## Want to help out?
6769

68-
See [the contributing](./docs/contributing.md) if you wish to get into the details of this terraform minikube provider!
70+
See [the contributing](./contributing.md) if you wish to get into the details of this terraform minikube provider!
File renamed without changes.

docs/index.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
---
2-
# generated by https://github.com/hashicorp/terraform-plugin-docs
32
page_title: "minikube Provider"
4-
subcategory: ""
53
description: |-
6-
4+
A terraform provider for [minikube!](https://minikube.sigs.k8s.io/docs/)
75
---
86

9-
# minikube Provider
7+
# Minikube Provider
108

119
A terraform provider for [minikube!](https://minikube.sigs.k8s.io/docs/)
1210

@@ -31,16 +29,24 @@ preferred driver and copy it to your .minikube/bin folder and ensure the current
3129
### Living dangerously
3230

3331
```bash
34-
#x85_64
35-
curl https://raw.githubusercontent.com/scott-the-programmer/terraform-provider-minikube/main/bootstrap/install-driver.sh | sudo bash -s "kvm1"
32+
#x86_64
33+
curl https://raw.githubusercontent.com/scott-the-programmer/terraform-provider-minikube/main/bootstrap/install-driver.sh | sudo bash -s "kvm2"
3634

37-
#arm63
38-
curl https://raw.githubusercontent.com/scott-the-programmer/terraform-provider-minikube/main/bootstrap/install-driver.sh | sudo bash -s "kvm1" "arm64"
35+
#arm62
36+
curl https://raw.githubusercontent.com/scott-the-programmer/terraform-provider-minikube/main/bootstrap/install-driver.sh | sudo bash -s "kvm2" "arm64"
3937
```
4038

4139
## Example Usage
4240

4341
```terraform
44-
provider "minikube" {}
42+
provider "minikube" {
43+
kubernetes_version = "v1.23.3"
44+
}
4545
```
46+
<br/><!-- schema generated by tfplugindocs -->
47+
## Schema
48+
49+
### Optional
50+
51+
- `kubernetes_version` (String) The Kubernetes version that the minikube VM will use (ex v1.2.3, 'stable' for v1.22.3, 'latest' for v1.22.4-rc.0). Defaults to 'stable'.
4652

docs/resources/cluster.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@ description: |-
88

99
# minikube_cluster (Resource)
1010

11-
Used to create a minikube cluster on the current host. You'll need to have a docker driver installed first (see the provider docs).
12-
13-
You'll be able to spin up and manage clusters exclusively with terraform, mimicking the process of using a cloud managed k8s cluster such as AKS / EKS / LKS
11+
Used to create a minikube cluster on the current host
1412

1513
## Example Usage
1614

1715
```terraform
16+
provider "minikube" {
17+
kubernetes_version = "v1.23.3"
18+
}
19+
1820
resource "minikube_cluster" "docker" {
1921
driver = "docker"
20-
kubernetes_version = "v1.23.3"
2122
cluster_name = "terraform-provider-minikube-acc-docker"
2223
addons = [
2324
"default-storageclass",
@@ -28,7 +29,6 @@ resource "minikube_cluster" "hyperkit" {
2829
vm = true
2930
driver = "hyperkit"
3031
cluster_name = "terraform-provider-minikube-acc-hyperkit"
31-
kubernetes_version = "v1.23.3"
3232
nodes = 3
3333
addons = [
3434
"dashboard",

examples/provider/provider.tf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
provider "minikube" {}
1+
provider "minikube" {
2+
kubernetes_version = "v1.23.3"
3+
}

examples/resources/minikube_cluster/resource.tf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
provider "minikube" {
2+
kubernetes_version = "v1.23.3"
3+
}
4+
15
resource "minikube_cluster" "docker" {
26
driver = "docker"
3-
kubernetes_version = "v1.23.3"
47
cluster_name = "terraform-provider-minikube-acc-docker"
58
addons = [
69
"default-storageclass",
@@ -11,7 +14,6 @@ resource "minikube_cluster" "hyperkit" {
1114
vm = true
1215
driver = "hyperkit"
1316
cluster_name = "terraform-provider-minikube-acc-hyperkit"
14-
kubernetes_version = "v1.23.3"
1517
nodes = 3
1618
addons = [
1719
"dashboard",

minikube/provider.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,31 @@ func Provider() *schema.Provider {
1919

2020
func NewProvider(providerConfigure schema.ConfigureContextFunc) *schema.Provider {
2121
return &schema.Provider{
22-
Schema: map[string]*schema.Schema{},
2322
ResourcesMap: map[string]*schema.Resource{
2423
"minikube_cluster": ResourceCluster(),
2524
},
2625
DataSourcesMap: map[string]*schema.Resource{},
2726
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 (ex v1.2.3, 'stable' for v1.22.3, 'latest' for v1.22.4-rc.0). Defaults to 'stable'.",
32+
Default: "v1.23.3",
33+
},
34+
},
2835
}
2936
}
3037

3138
func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
3239
var diags diag.Diagnostics
3340

3441
mutex := &sync.Mutex{}
42+
k8sVersion := d.Get("kubernetes_version").(string)
3543
minikubeClientFactory := func() (service.ClusterClient, error) {
36-
return &service.MinikubeClient{TfCreationLock: mutex}, nil
44+
return &service.MinikubeClient{
45+
TfCreationLock: mutex,
46+
K8sVersion: k8sVersion}, nil
3747
}
3848
return minikubeClientFactory, diags
3949
}

minikube/resource_cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (service.Cl
227227
ports = []string{}
228228
}
229229

230-
k8sVersion := d.Get("kubernetes_version").(string)
230+
k8sVersion := clusterClient.GetK8sVersion()
231231
kubernetesConfig := config.KubernetesConfig{
232232
KubernetesVersion: k8sVersion,
233233
ClusterName: d.Get("cluster_name").(string),

minikube/resource_cluster_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ func mockSuccess(t *testing.T, clusterName string) schema.ConfigureContextFunc {
211211
Delete().
212212
Return(nil)
213213

214+
mockClusterClient.EXPECT().
215+
GetK8sVersion().
216+
Return("v1.99.9").
217+
AnyTimes()
218+
214219
configureContext := func(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
215220
var diags diag.Diagnostics
216221
mockClusterClientFactory := func() (service.ClusterClient, error) {

minikube/service/minikube_client.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:generate mockgen -source=$GOFILE -destination=mock_$GOFILE -package=$GOPACKAGE
1+
//go:generate go run github.com/golang/mock/mockgen -source=$GOFILE -destination=mock_$GOFILE -package=$GOPACKAGE
22
package service
33

44
import (
@@ -27,6 +27,7 @@ type ClusterClient interface {
2727
Start() (*kubeconfig.Settings, error)
2828
Delete() error
2929
GetClusterConfig() *config.ClusterConfig
30+
GetK8sVersion() string
3031
}
3132

3233
type MinikubeClient struct {
@@ -40,6 +41,7 @@ type MinikubeClient struct {
4041
// TfCreationLock is a mutex used to prevent multiple minikube clients from conflicting on Start().
4142
// Only set this if you're using MinikubeClient in a concurrent context
4243
TfCreationLock *sync.Mutex
44+
K8sVersion string
4345

4446
nRunner Node
4547
dLoader Downloader
@@ -183,6 +185,10 @@ func (e *MinikubeClient) GetClusterConfig() *config.ClusterConfig {
183185
return cluster.Config
184186
}
185187

188+
func (e *MinikubeClient) GetK8sVersion() string {
189+
return e.K8sVersion
190+
}
191+
186192
// downloadIsos retrieve all prerequisite images prior to provisioning
187193
func (e *MinikubeClient) downloadIsos() (string, error) {
188194
url, err := e.dLoader.ISO(e.isoUrls, true)

0 commit comments

Comments
 (0)