Skip to content

Commit a43d8ad

Browse files
authored
Change resources requests and limits to TypeMap (#1065)
1 parent a052a46 commit a43d8ad

14 files changed

+71
-157
lines changed

_examples/google-gke-nfs-filestore/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,11 @@ resource "kubernetes_deployment" "mariadb" {
207207
}
208208

209209
resources {
210-
limits {
210+
limits = {
211211
cpu = "0.5"
212212
memory = "512Mi"
213213
}
214-
requests {
214+
requests = {
215215
cpu = "250m"
216216
memory = "50Mi"
217217
}

_examples/http-nginx/replication-controller.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ resource "kubernetes_replication_controller" "example" {
2929
}
3030

3131
resources {
32-
limits {
32+
limits = {
3333
cpu = "0.5"
3434
memory = "512Mi"
3535
}
36-
requests {
36+
requests = {
3737
cpu = "250m"
3838
memory = "50Mi"
3939
}

kubernetes/resource_kubernetes_deployment_test.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -566,10 +566,12 @@ func TestAccKubernetesDeployment_with_resource_requirements(t *testing.T) {
566566
Check: resource.ComposeAggregateTestCheckFunc(
567567
testAccCheckKubernetesDeploymentExists("kubernetes_deployment.test", &conf),
568568
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.image", imageName),
569-
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.requests.0.memory", "50Mi"),
570-
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.requests.0.cpu", "250m"),
571-
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.limits.0.memory", "512Mi"),
572-
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.limits.0.cpu", "500m"),
569+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.requests.memory", "50Mi"),
570+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.requests.cpu", "250m"),
571+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.requests.nvidia/gpu", "1"),
572+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.limits.memory", "512Mi"),
573+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.limits.cpu", "500m"),
574+
resource.TestCheckResourceAttr("kubernetes_deployment.test", "spec.0.template.0.spec.0.container.0.resources.0.limits.nvidia/gpu", "1"),
573575
),
574576
},
575577
},
@@ -1163,7 +1165,7 @@ func testAccKubernetesDeploymentConfig_basic(name string) string {
11631165
}
11641166
11651167
resources {
1166-
requests {
1168+
requests = {
11671169
memory = "64Mi"
11681170
cpu = "50m"
11691171
}
@@ -1220,7 +1222,7 @@ func testAccKubernetesDeploymentConfig_initContainer(name string) string {
12201222
command = ["sh", "-c", "echo The app is running! && sleep 3600"]
12211223
12221224
resources {
1223-
requests {
1225+
requests = {
12241226
memory = "64Mi"
12251227
cpu = "50m"
12261228
}
@@ -1233,7 +1235,7 @@ func testAccKubernetesDeploymentConfig_initContainer(name string) string {
12331235
command = ["sh", "-c", "until nslookup init-service.default.svc.cluster.local; do echo waiting for init-service; sleep 2; done"]
12341236
12351237
resources {
1236-
requests {
1238+
requests = {
12371239
memory = "64Mi"
12381240
cpu = "50m"
12391241
}
@@ -1958,20 +1960,24 @@ func testAccKubernetesDeploymentConfigWithResourceRequirements(deploymentName, i
19581960
name = "containername"
19591961
19601962
resources {
1961-
limits {
1963+
limits = {
19621964
cpu = "0.5"
19631965
memory = "512Mi"
1966+
"nvidia/gpu" = "1"
19641967
}
19651968
1966-
requests {
1969+
requests = {
19671970
cpu = "250m"
19681971
memory = "50Mi"
1972+
"nvidia/gpu" = "1"
19691973
}
19701974
}
19711975
}
19721976
}
19731977
}
19741978
}
1979+
1980+
wait_for_rollout = false
19751981
}
19761982
`, deploymentName, imageName)
19771983
}
@@ -2244,7 +2250,7 @@ func testAccKubernetesDeploymentConfigHostAliases(name string, imageName string)
22442250
name = "tf-acc-test"
22452251
22462252
resources {
2247-
requests {
2253+
requests = {
22482254
memory = "64Mi"
22492255
cpu = "50m"
22502256
}
@@ -2397,7 +2403,7 @@ func testAccKubernetesDeploymentConfig_regression(provider, name string) string
23972403
}
23982404
23992405
resources {
2400-
requests {
2406+
requests = {
24012407
memory = "64Mi"
24022408
cpu = "50m"
24032409
}

kubernetes/resource_kubernetes_pod_test.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -576,10 +576,12 @@ func TestAccKubernetesPod_with_resource_requirements(t *testing.T) {
576576
Check: resource.ComposeAggregateTestCheckFunc(
577577
testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf),
578578
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName),
579-
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.0.memory", "50Mi"),
580-
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.0.cpu", "250m"),
581-
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.0.memory", "512Mi"),
582-
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.0.cpu", "500m"),
579+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.memory", "50Mi"),
580+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.cpu", "250m"),
581+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.ephemeral-storage", "128Mi"),
582+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.memory", "512Mi"),
583+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.cpu", "500m"),
584+
resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.ephemeral-storage", "512Mi"),
583585
),
584586
},
585587
},
@@ -1829,14 +1831,16 @@ func testAccKubernetesPodConfigWithResourceRequirements(podName, imageName strin
18291831
name = "containername"
18301832
18311833
resources {
1832-
limits {
1834+
limits = {
18331835
cpu = "0.5"
1834-
memory = "512Mi"
1836+
memory = "512Mi"
1837+
"ephemeral-storage" = "512Mi"
18351838
}
18361839
1837-
requests {
1840+
requests = {
18381841
cpu = "250m"
1839-
memory = "50Mi"
1842+
memory = "50Mi"
1843+
"ephemeral-storage" = "128Mi"
18401844
}
18411845
}
18421846
}

kubernetes/resource_kubernetes_replication_controller_deprecated_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -793,11 +793,11 @@ func testAccKubernetesReplicationControllerConfig_deprecated_WithResourceRequire
793793
name = "containername"
794794
795795
resources {
796-
limits {
796+
limits = {
797797
cpu = "0.5"
798798
memory = "512Mi"
799799
}
800-
requests {
800+
requests = {
801801
cpu = "250m"
802802
memory = "50Mi"
803803
}

kubernetes/resource_kubernetes_replication_controller_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,12 +1197,12 @@ func testAccKubernetesReplicationControllerConfigWithResourceRequirements(rcName
11971197
name = "containername"
11981198
11991199
resources {
1200-
limits {
1200+
limits = {
12011201
cpu = "0.5"
12021202
memory = "512Mi"
12031203
}
12041204
1205-
requests {
1205+
requests = {
12061206
cpu = "250m"
12071207
memory = "50Mi"
12081208
}

kubernetes/schema_container.go

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -95,53 +95,24 @@ func handlerFields() map[string]*schema.Schema {
9595
func resourcesField() map[string]*schema.Schema {
9696
return map[string]*schema.Schema{
9797
"limits": {
98-
Type: schema.TypeList,
98+
Type: schema.TypeMap,
9999
Optional: true,
100100
Computed: true,
101-
MaxItems: 1,
102101
Description: "Describes the maximum amount of compute resources allowed. More info: http://kubernetes.io/docs/user-guide/compute-resources/",
103-
Elem: &schema.Resource{
104-
Schema: map[string]*schema.Schema{
105-
"cpu": {
106-
Type: schema.TypeString,
107-
Optional: true,
108-
Computed: true,
109-
ValidateFunc: validateResourceQuantity,
110-
DiffSuppressFunc: suppressEquivalentResourceQuantity,
111-
},
112-
"memory": {
113-
Type: schema.TypeString,
114-
Optional: true,
115-
Computed: true,
116-
ValidateFunc: validateResourceQuantity,
117-
DiffSuppressFunc: suppressEquivalentResourceQuantity,
118-
},
119-
},
102+
Elem: &schema.Schema{
103+
Type: schema.TypeString,
120104
},
105+
DiffSuppressFunc: suppressEquivalentResourceQuantity,
121106
},
122107
"requests": {
123-
Type: schema.TypeList,
124-
Optional: true,
125-
Computed: true,
126-
MaxItems: 1,
127-
Elem: &schema.Resource{
128-
Schema: map[string]*schema.Schema{
129-
"cpu": {
130-
Type: schema.TypeString,
131-
Optional: true,
132-
Computed: true,
133-
ValidateFunc: validateResourceQuantity,
134-
DiffSuppressFunc: suppressEquivalentResourceQuantity,
135-
},
136-
"memory": {
137-
Type: schema.TypeString,
138-
Optional: true,
139-
Computed: true,
140-
ValidateFunc: validateResourceQuantity,
141-
DiffSuppressFunc: suppressEquivalentResourceQuantity,
142-
},
143-
},
108+
Type: schema.TypeMap,
109+
Optional: true,
110+
Computed: true,
111+
Description: "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/",
112+
Elem: &schema.Schema{
113+
Type: schema.TypeString,
144114
},
115+
DiffSuppressFunc: suppressEquivalentResourceQuantity,
145116
},
146117
}
147118
}

kubernetes/structures_container.go

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package kubernetes
22

33
import (
4-
"k8s.io/api/core/v1"
4+
v1 "k8s.io/api/core/v1"
55
"k8s.io/apimachinery/pkg/util/intstr"
66
)
77

@@ -339,10 +339,10 @@ func flattenContainerPorts(in []v1.ContainerPort) []interface{} {
339339
func flattenContainerResourceRequirements(in v1.ResourceRequirements) ([]interface{}, error) {
340340
att := make(map[string]interface{})
341341
if len(in.Limits) > 0 {
342-
att["limits"] = []interface{}{flattenResourceList(in.Limits)}
342+
att["limits"] = flattenResourceList(in.Limits)
343343
}
344344
if len(in.Requests) > 0 {
345-
att["requests"] = []interface{}{flattenResourceList(in.Requests)}
345+
att["requests"] = flattenResourceList(in.Requests)
346346
}
347347
return []interface{}{att}, nil
348348
}
@@ -960,38 +960,20 @@ func expandContainerResourceRequirements(l []interface{}) (*v1.ResourceRequireme
960960
}
961961
in := l[0].(map[string]interface{})
962962

963-
fn := func(in []interface{}) (*v1.ResourceList, error) {
964-
for _, c := range in {
965-
p := c.(map[string]interface{})
966-
if p["cpu"] == "" {
967-
delete(p, "cpu")
968-
}
969-
if p["memory"] == "" {
970-
delete(p, "memory")
971-
}
972-
rl, err := expandMapToResourceList(p)
973-
if err != nil {
974-
return rl, err
975-
}
976-
return rl, nil
977-
}
978-
return nil, nil
979-
}
980-
981-
if v, ok := in["limits"].([]interface{}); ok && len(v) > 0 {
982-
rl, err := fn(v)
963+
if v, ok := in["limits"].(map[string]interface{}); ok && len(v) > 0 {
964+
r, err := expandMapToResourceList(v)
983965
if err != nil {
984966
return obj, err
985967
}
986-
obj.Limits = *rl
968+
obj.Limits = *r
987969
}
988970

989-
if v, ok := in["requests"].([]interface{}); ok && len(v) > 0 {
990-
rq, err := fn(v)
971+
if v, ok := in["requests"].(map[string]interface{}); ok && len(v) > 0 {
972+
r, err := expandMapToResourceList(v)
991973
if err != nil {
992974
return obj, err
993975
}
994-
obj.Requests = *rq
976+
obj.Requests = *r
995977
}
996978

997979
return obj, nil

website/docs/guides/getting-started.html.markdown

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,8 @@ Terraform will perform the following actions:
279279
}
280280
281281
+ resources {
282-
+ limits {
283-
+ cpu = (known after apply)
284-
+ memory = (known after apply)
285-
}
286-
287-
+ requests {
288-
+ cpu = (known after apply)
289-
+ memory = (known after apply)
290-
}
282+
+ limits = (known after apply)
283+
+ requests = (known after apply)
291284
}
292285
293286
+ volume_mount {
@@ -613,11 +606,11 @@ resource "kubernetes_deployment" "nginx" {
613606
}
614607
615608
resources {
616-
limits {
609+
limits = {
617610
cpu = "0.5"
618611
memory = "512Mi"
619612
}
620-
requests {
613+
requests = {
621614
cpu = "250m"
622615
memory = "50Mi"
623616
}

website/docs/r/daemonset.html.markdown

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ resource "kubernetes_daemonset" "example" {
4141
name = "example"
4242
4343
resources {
44-
limits {
44+
limits = {
4545
cpu = "0.5"
4646
memory = "512Mi"
4747
}
48-
requests {
48+
requests = {
4949
cpu = "250m"
5050
memory = "50Mi"
5151
}
@@ -536,13 +536,6 @@ The `option` block supports the following:
536536
* `post_start` - (Optional) post_start is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. For more info see [Kubernetes reference](http://kubernetes.io/docs/user-guide/container-environment#hook-details)
537537
* `pre_stop` - (Optional) pre_stop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. For more info see [Kubernetes reference](http://kubernetes.io/docs/user-guide/container-environment#hook-details)
538538

539-
### `limits`
540-
541-
#### Arguments
542-
543-
* `cpu` - (Optional) CPU
544-
* `memory` - (Optional) Memory
545-
546539
### `liveness_probe`
547540

548541
#### Arguments
@@ -647,13 +640,6 @@ The `option` block supports the following:
647640
* `limits` - (Optional) Describes the maximum amount of compute resources allowed. For more info see [Kubernetes reference](http://kubernetes.io/docs/user-guide/compute-resources)/
648641
* `requests` - (Optional) Describes the minimum amount of compute resources required.
649642

650-
### `requests`
651-
652-
#### Arguments
653-
654-
* `cpu` - (Optional) CPU
655-
* `memory` - (Optional) Memory
656-
657643
### `resource_field_ref`
658644

659645
#### Arguments

0 commit comments

Comments
 (0)