Skip to content

Commit 8a3518f

Browse files
implement no-limit and max for memory
1 parent fac49c4 commit 8a3518f

File tree

5 files changed

+104
-19
lines changed

5 files changed

+104
-19
lines changed

minikube/generator/schema_builder.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ var updateFields = []string{
5858
var schemaOverrides map[string]SchemaOverride = map[string]SchemaOverride{
5959
"memory": {
6060
Default: "4g",
61-
Description: "Amount of RAM to allocate to Kubernetes (format: <number>[<unit>(case-insensitive)], where unit = b, k, kb, m, mb, g or gb)",
61+
Description: "Amount of RAM to allocate to Kubernetes (format: <number>[<unit>], where unit = b, k, m or g). Use \"max\" to use the maximum amount of memory. Use \"no-limit\" to not specify a limit (Docker/Podman only))",
6262
Type: String,
6363
StateFunc: "state_utils.ResourceSizeConverter()",
6464
ValidateDiagFunc: "state_utils.ResourceSizeValidator()",
@@ -72,8 +72,8 @@ var schemaOverrides map[string]SchemaOverride = map[string]SchemaOverride{
7272
},
7373
"cpus": {
7474
Default: "2",
75-
Description: "Amount of CPUs to allocate to Kubernetes",
76-
Type: Int,
75+
Description: "Number of CPUs allocated to Kubernetes. Use \"max\" to use the maximum number of CPUs. Use \"no-limit\" to not specify a limit (Docker/Podman only)",
76+
Type: String,
7777
},
7878
// Customize the description to be the fullset of drivers
7979
"driver": {

minikube/lib/memory.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package lib
2+
3+
import (
4+
"k8s.io/minikube/pkg/minikube/machine"
5+
)
6+
7+
8+
var NoLimit = "no-limit"
9+
var Max = "max"
10+
11+
// MemoryInfo holds system and container memory information
12+
type MemoryInfo struct {
13+
SystemMemory int
14+
}
15+
16+
// GetMemoryLimits returns the amount of memory allocated to the system and container
17+
// The return values are in MiB
18+
func GetMemoryLimit() (*MemoryInfo, error) {
19+
info, _, memErr, _ := machine.LocalHostInfo()
20+
21+
if memErr != nil {
22+
return nil, memErr
23+
}
24+
25+
// Subtract 1gb for overhead
26+
memInfo := &MemoryInfo{
27+
SystemMemory: int(info.Memory) - 1024,
28+
}
29+
30+
return memInfo, nil
31+
}
32+

minikube/resource_cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (lib.Cluste
271271
}
272272

273273
memoryStr := d.Get("memory").(string)
274-
memoryMb, err := pkgutil.CalculateSizeInMB(memoryStr)
274+
memoryMb, err := state_utils.GetMemory(memoryStr);
275275
if err != nil {
276276
return nil, err
277277
}

minikube/state_utils/memory.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package state_utils
2+
3+
import (
4+
"github.com/scott-the-programmer/terraform-provider-minikube/minikube/lib"
5+
pkgutil "k8s.io/minikube/pkg/util"
6+
)
7+
8+
func GetMemory(memoryStr string) (int, error) {
9+
var memoryMb int
10+
var err error
11+
if memoryStr == lib.Max {
12+
memoryInfo, err := lib.GetMemoryLimit()
13+
if err != nil {
14+
return 0, err
15+
}
16+
17+
memoryMb = memoryInfo.SystemMemory
18+
} else if memoryStr == lib.NoLimit {
19+
memoryMb = 0
20+
} else {
21+
err = ResourceSizeValidatorImpl(memoryStr)
22+
if err != nil {
23+
return 0, err
24+
}
25+
26+
memoryStr, err = ResourceSizeConverterImpl(memoryStr)
27+
if err != nil {
28+
return 0, err
29+
}
30+
31+
memoryMb, err = pkgutil.CalculateSizeInMB(memoryStr)
32+
if err != nil {
33+
return 0, err
34+
}
35+
}
36+
37+
return memoryMb, err
38+
}

minikube/state_utils/resource_size.go

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,46 @@ import (
1313

1414
func ResourceSizeConverter() schema.SchemaStateFunc {
1515
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)
16+
result, err := ResourceSizeConverterImpl(val)
2117
if err != nil {
22-
panic(errors.New("invalid resource size value"))
18+
panic(err)
2319
}
20+
return result
21+
}
22+
}
2423

25-
return strconv.Itoa(sizeMb) + "mb"
24+
func ResourceSizeConverterImpl(val interface{}) (string, error) {
25+
size, ok := val.(string)
26+
if !ok {
27+
return "", errors.New("resource size is not a string")
2628
}
29+
sizeMb, err := pkgutil.CalculateSizeInMB(size)
30+
if err != nil {
31+
return "", errors.New("invalid resource size value")
32+
}
33+
34+
return strconv.Itoa(sizeMb) + "mb", nil
2735
}
2836

2937
func ResourceSizeValidator() schema.SchemaValidateDiagFunc {
3038
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)
39+
err := ResourceSizeValidatorImpl(val)
3740
if err != nil {
38-
diag := diag.FromErr(errors.New("invalid resource size value"))
39-
return diag
41+
return diag.FromErr(err)
4042
}
4143
return nil
44+
4245
})
4346
}
47+
48+
func ResourceSizeValidatorImpl(val interface{}) error {
49+
size, ok := val.(string)
50+
if !ok {
51+
return errors.New("resource size is not a string")
52+
}
53+
_, err := pkgutil.CalculateSizeInMB(size)
54+
if err != nil {
55+
return errors.New("invalid resource size value")
56+
}
57+
return nil
58+
}

0 commit comments

Comments
 (0)