Skip to content

Commit 6e3cfd4

Browse files
prevent equivalent disk_size values from causing cluster replacement
1 parent f5ca1fe commit 6e3cfd4

File tree

7 files changed

+75
-67
lines changed

7 files changed

+75
-67
lines changed

minikube/generator/schema_builder.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,15 @@ var schemaOverrides map[string]SchemaOverride = map[string]SchemaOverride{
6060
Default: "4g",
6161
Description: "Amount of RAM to allocate to Kubernetes (format: <number>[<unit>(case-insensitive)], where unit = b, k, kb, m, mb, g or gb)",
6262
Type: String,
63-
StateFunc: "state_utils.MemoryConverter()",
64-
ValidateDiagFunc: "state_utils.MemoryValidator()",
63+
StateFunc: "state_utils.ResourceSizeConverter()",
64+
ValidateDiagFunc: "state_utils.ResourceSizeValidator()",
65+
},
66+
"disk_size": {
67+
Default: "20000mb",
68+
Description: "Disk size allocated to the minikube VM (format: <number>[<unit>(case-insensitive)], where unit = b, k, kb, m, mb, g or gb)",
69+
Type: String,
70+
//StateFunc: "state_utils.ResourceSizeConverter()",
71+
//ValidateDiagFunc: "state_utils.ResourceSizeValidator()",
6572
},
6673
"cpus": {
6774
Default: "2",

minikube/generator/schema_builder_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,8 @@ func TestOverride(t *testing.T) {
366366
ForceNew: true,
367367
368368
Default: "4g",
369-
StateFunc: state_utils.MemoryConverter(),
370-
ValidateDiagFunc: state_utils.MemoryValidator(),
369+
StateFunc: state_utils.ResourceSizeConverter(),
370+
ValidateDiagFunc: state_utils.ResourceSizeValidator(),
371371
},
372372
373373
}

minikube/resource_cluster_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,8 @@ func testUnitClusterConfig_Update(driver string, clusterName string) string {
571571
"ingress",
572572
"storage-provisioner",
573573
]
574+
575+
disk_size = "20g"
574576
}
575577
`, driver, clusterName)
576578
}

minikube/schema_cluster.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,14 @@ var (
252252

253253
"disk_size": {
254254
Type: schema.TypeString,
255-
Description: "Disk size allocated to the minikube VM (format: <number>[<unit>], where unit = b, k, m or g).",
255+
Description: "Disk size allocated to the minikube VM (format: <number>[<unit>(case-insensitive)], where unit = b, k, kb, m, mb, g or gb)",
256256

257257
Optional: true,
258258
ForceNew: true,
259259

260260
Default: "20000mb",
261+
StateFunc: state_utils.ResourceSizeConverter(),
262+
ValidateDiagFunc: state_utils.ResourceSizeValidator(),
261263
},
262264

263265
"dns_domain": {
@@ -672,8 +674,8 @@ var (
672674
ForceNew: true,
673675

674676
Default: "4g",
675-
StateFunc: state_utils.MemoryConverter(),
676-
ValidateDiagFunc: state_utils.MemoryValidator(),
677+
StateFunc: state_utils.ResourceSizeConverter(),
678+
ValidateDiagFunc: state_utils.ResourceSizeValidator(),
677679
},
678680

679681
"mount": {

minikube/state_utils/memory.go

Lines changed: 0 additions & 45 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package state_utils
2+
3+
import (
4+
"errors"
5+
"strconv"
6+
7+
"github.com/hashicorp/go-cty/cty"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
11+
pkgutil "k8s.io/minikube/pkg/util"
12+
)
13+
14+
func ResourceSizeConverter() schema.SchemaStateFunc {
15+
return func(val interface{}) string {
16+
size, ok := val.(string)
17+
if !ok {
18+
panic(errors.New("resource size is not a string"))
19+
}
20+
sizeMb, err := pkgutil.CalculateSizeInMB(size)
21+
if err != nil {
22+
panic(errors.New("invalid resource size value"))
23+
}
24+
25+
return strconv.Itoa(sizeMb) + "mb"
26+
}
27+
}
28+
29+
func ResourceSizeValidator() schema.SchemaValidateDiagFunc {
30+
return schema.SchemaValidateDiagFunc(func(val interface{}, path cty.Path) diag.Diagnostics {
31+
size, ok := val.(string)
32+
if !ok {
33+
diag := diag.FromErr(errors.New("resource size is not a string"))
34+
return diag
35+
}
36+
_, err := pkgutil.CalculateSizeInMB(size)
37+
if err != nil {
38+
diag := diag.FromErr(errors.New("invalid resource size value"))
39+
return diag
40+
}
41+
return nil
42+
})
43+
}

minikube/state_utils/memory_test.go renamed to minikube/state_utils/resource_size_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import (
77
"github.com/stretchr/testify/require"
88
)
99

10-
func TestMemoryConverter(t *testing.T) {
11-
converter := MemoryConverter()
10+
func TestResourceSizeConverter(t *testing.T) {
11+
converter := ResourceSizeConverter()
1212

13-
t.Run("ValidMemoryFlagG", func(t *testing.T) {
13+
t.Run("ValidSizeFlagG", func(t *testing.T) {
1414
result := converter("2G")
1515
assert.Equal(t, "2048mb", result)
1616
})
1717

18-
t.Run("ValidMemoryFlagGb", func(t *testing.T) {
18+
t.Run("ValidSizeFlagGb", func(t *testing.T) {
1919
result := converter("2Gb")
2020
assert.Equal(t, "2048mb", result)
2121
})
@@ -26,37 +26,36 @@ func TestMemoryConverter(t *testing.T) {
2626
assert.Equal(t, resultm, resultg)
2727
})
2828

29-
t.Run("InvalidMemoryFlag", func(t *testing.T) {
30-
assert.PanicsWithError(t, "memory flag is not a string", func() {
29+
t.Run("InvalidSizeFlag", func(t *testing.T) {
30+
assert.PanicsWithError(t, "resource size is not a string", func() {
3131
converter(123)
3232
})
3333
})
3434

35-
t.Run("InvalidMemoryValue", func(t *testing.T) {
36-
assert.PanicsWithError(t, "invalid memory value", func() {
35+
t.Run("InvalidSizeValue", func(t *testing.T) {
36+
assert.PanicsWithError(t, "invalid resource size value", func() {
3737
converter("invalid")
3838
})
3939
})
4040
}
4141

42-
func TestMemoryValidator(t *testing.T) {
43-
validator := MemoryValidator()
42+
func TestResourceSizeValidator(t *testing.T) {
43+
validator := ResourceSizeValidator()
4444

45-
t.Run("ValidMemoryFlag", func(t *testing.T) {
45+
t.Run("ValidSizeFlag", func(t *testing.T) {
4646
diags := validator("2G", nil)
4747
assert.Empty(t, diags)
4848
})
4949

50-
t.Run("InvalidMemoryFlag", func(t *testing.T) {
50+
t.Run("InvalidSizeFlag", func(t *testing.T) {
5151
diags := validator(123, nil)
5252
require.Len(t, diags, 1)
53-
assert.Equal(t, diags[0].Summary, "memory flag is not a string")
53+
assert.Equal(t, diags[0].Summary, "resource size is not a string")
5454
})
5555

56-
t.Run("InvalidMemoryValue", func(t *testing.T) {
56+
t.Run("InvalidSizeValue", func(t *testing.T) {
5757
diags := validator("invalid", nil)
5858
require.Len(t, diags, 1)
5959
assert.True(t, diags.HasError())
6060
})
61-
6261
}

0 commit comments

Comments
 (0)