github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_limit_range_test.go (about) 1 package kubernetes 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/acctest" 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 api "k8s.io/kubernetes/pkg/api/v1" 12 kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" 13 ) 14 15 func TestAccKubernetesLimitRange_basic(t *testing.T) { 16 var conf api.LimitRange 17 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 18 19 resource.Test(t, resource.TestCase{ 20 PreCheck: func() { testAccPreCheck(t) }, 21 IDRefreshName: "kubernetes_limit_range.test", 22 Providers: testAccProviders, 23 CheckDestroy: testAccCheckKubernetesLimitRangeDestroy, 24 Steps: []resource.TestStep{ 25 { 26 Config: testAccKubernetesLimitRangeConfig_basic(name), 27 Check: resource.ComposeAggregateTestCheckFunc( 28 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 29 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "1"), 30 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.TestAnnotationOne", "one"), 31 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}), 32 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "3"), 33 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelOne", "one"), 34 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelThree", "three"), 35 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelFour", "four"), 36 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}), 37 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 38 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 39 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 40 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 41 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 42 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 43 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.%", "2"), 44 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.cpu", "200m"), 45 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.memory", "512M"), 46 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.%", "2"), 47 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.cpu", "100m"), 48 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.memory", "256M"), 49 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Container"), 50 ), 51 }, 52 { 53 Config: testAccKubernetesLimitRangeConfig_metaModified(name), 54 Check: resource.ComposeAggregateTestCheckFunc( 55 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 56 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "2"), 57 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.TestAnnotationOne", "one"), 58 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 59 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}), 60 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "3"), 61 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelOne", "one"), 62 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelTwo", "two"), 63 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.TestLabelThree", "three"), 64 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 65 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 66 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 67 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 68 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 69 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 70 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 71 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.%", "2"), 72 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.cpu", "200m"), 73 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.memory", "512M"), 74 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.%", "2"), 75 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.cpu", "100m"), 76 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.memory", "256M"), 77 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Container"), 78 ), 79 }, 80 { 81 Config: testAccKubernetesLimitRangeConfig_specModified(name), 82 Check: resource.ComposeAggregateTestCheckFunc( 83 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 84 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "0"), 85 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 86 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "0"), 87 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 88 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 89 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 90 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 91 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 92 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 93 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 94 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.%", "2"), 95 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.cpu", "200m"), 96 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.memory", "1024M"), 97 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.%", "2"), 98 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.cpu", "100m"), 99 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default_request.memory", "256M"), 100 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.max.%", "1"), 101 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.max.cpu", "500m"), 102 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.%", "2"), 103 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.cpu", "10m"), 104 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.memory", "10M"), 105 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Container"), 106 ), 107 }, 108 }, 109 }) 110 } 111 112 func TestAccKubernetesLimitRange_generatedName(t *testing.T) { 113 var conf api.LimitRange 114 prefix := "tf-acc-test-" 115 116 resource.Test(t, resource.TestCase{ 117 PreCheck: func() { testAccPreCheck(t) }, 118 IDRefreshName: "kubernetes_limit_range.test", 119 Providers: testAccProviders, 120 CheckDestroy: testAccCheckKubernetesLimitRangeDestroy, 121 Steps: []resource.TestStep{ 122 { 123 Config: testAccKubernetesLimitRangeConfig_generatedName(prefix), 124 Check: resource.ComposeAggregateTestCheckFunc( 125 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 126 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "0"), 127 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 128 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "0"), 129 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 130 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.generate_name", prefix), 131 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 132 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 133 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 134 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 135 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 136 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Pod"), 137 ), 138 }, 139 }, 140 }) 141 } 142 143 func TestAccKubernetesLimitRange_typeChange(t *testing.T) { 144 var conf api.LimitRange 145 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 146 147 resource.Test(t, resource.TestCase{ 148 PreCheck: func() { testAccPreCheck(t) }, 149 IDRefreshName: "kubernetes_limit_range.test", 150 Providers: testAccProviders, 151 CheckDestroy: testAccCheckKubernetesLimitRangeDestroy, 152 Steps: []resource.TestStep{ 153 { 154 Config: testAccKubernetesLimitRangeConfig_typeChange(name), 155 Check: resource.ComposeAggregateTestCheckFunc( 156 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 157 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "0"), 158 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 159 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "0"), 160 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 161 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 162 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 163 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 164 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 165 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 166 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 167 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.%", "2"), 168 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.cpu", "200m"), 169 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.default.memory", "1024M"), 170 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Container"), 171 ), 172 }, 173 { 174 Config: testAccKubernetesLimitRangeConfig_typeChangeModified(name), 175 Check: resource.ComposeAggregateTestCheckFunc( 176 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 177 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "0"), 178 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 179 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "0"), 180 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 181 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 182 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 183 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 184 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 185 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 186 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "1"), 187 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.%", "2"), 188 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.cpu", "200m"), 189 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.min.memory", "1024M"), 190 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Pod"), 191 ), 192 }, 193 }, 194 }) 195 } 196 197 func TestAccKubernetesLimitRange_multipleLimits(t *testing.T) { 198 var conf api.LimitRange 199 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 200 201 resource.Test(t, resource.TestCase{ 202 PreCheck: func() { testAccPreCheck(t) }, 203 IDRefreshName: "kubernetes_limit_range.test", 204 Providers: testAccProviders, 205 CheckDestroy: testAccCheckKubernetesLimitRangeDestroy, 206 Steps: []resource.TestStep{ 207 { 208 Config: testAccKubernetesLimitRangeConfig_multipleLimits(name), 209 Check: resource.ComposeAggregateTestCheckFunc( 210 testAccCheckKubernetesLimitRangeExists("kubernetes_limit_range.test", &conf), 211 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.annotations.%", "0"), 212 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 213 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.labels.%", "0"), 214 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 215 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "metadata.0.name", name), 216 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.generation"), 217 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.resource_version"), 218 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.self_link"), 219 resource.TestCheckResourceAttrSet("kubernetes_limit_range.test", "metadata.0.uid"), 220 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.#", "3"), 221 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.max.%", "2"), 222 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.max.cpu", "200m"), 223 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.max.memory", "1024M"), 224 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.0.type", "Pod"), 225 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.1.min.%", "1"), 226 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.1.min.storage", "24M"), 227 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.1.type", "PersistentVolumeClaim"), 228 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.2.default.%", "2"), 229 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.2.default.cpu", "50m"), 230 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.2.default.memory", "24M"), 231 resource.TestCheckResourceAttr("kubernetes_limit_range.test", "spec.0.limit.2.type", "Container"), 232 ), 233 }, 234 }, 235 }) 236 } 237 238 func TestAccKubernetesLimitRange_importBasic(t *testing.T) { 239 resourceName := "kubernetes_limit_range.test" 240 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 241 242 resource.Test(t, resource.TestCase{ 243 PreCheck: func() { testAccPreCheck(t) }, 244 Providers: testAccProviders, 245 CheckDestroy: testAccCheckKubernetesLimitRangeDestroy, 246 Steps: []resource.TestStep{ 247 { 248 Config: testAccKubernetesLimitRangeConfig_basic(name), 249 }, 250 { 251 ResourceName: resourceName, 252 ImportState: true, 253 ImportStateVerify: true, 254 }, 255 }, 256 }) 257 } 258 259 func testAccCheckKubernetesLimitRangeDestroy(s *terraform.State) error { 260 conn := testAccProvider.Meta().(*kubernetes.Clientset) 261 262 for _, rs := range s.RootModule().Resources { 263 if rs.Type != "kubernetes_limit_range" { 264 continue 265 } 266 namespace, name := idParts(rs.Primary.ID) 267 resp, err := conn.CoreV1().LimitRanges(namespace).Get(name, meta_v1.GetOptions{}) 268 if err == nil { 269 if resp.Namespace == namespace && resp.Name == name { 270 return fmt.Errorf("Limit Range still exists: %s", rs.Primary.ID) 271 } 272 } 273 } 274 275 return nil 276 } 277 278 func testAccCheckKubernetesLimitRangeExists(n string, obj *api.LimitRange) resource.TestCheckFunc { 279 return func(s *terraform.State) error { 280 rs, ok := s.RootModule().Resources[n] 281 if !ok { 282 return fmt.Errorf("Not found: %s", n) 283 } 284 285 conn := testAccProvider.Meta().(*kubernetes.Clientset) 286 namespace, name := idParts(rs.Primary.ID) 287 out, err := conn.CoreV1().LimitRanges(namespace).Get(name, meta_v1.GetOptions{}) 288 if err != nil { 289 return err 290 } 291 292 *obj = *out 293 return nil 294 } 295 } 296 297 func testAccKubernetesLimitRangeConfig_basic(name string) string { 298 return fmt.Sprintf(` 299 resource "kubernetes_limit_range" "test" { 300 metadata { 301 annotations { 302 TestAnnotationOne = "one" 303 } 304 labels { 305 TestLabelOne = "one" 306 TestLabelThree = "three" 307 TestLabelFour = "four" 308 } 309 name = "%s" 310 } 311 spec { 312 limit { 313 type = "Container" 314 315 default { 316 cpu = "200m" 317 memory = "512M" 318 } 319 320 default_request { 321 cpu = "100m" 322 memory = "256M" 323 } 324 } 325 } 326 } 327 `, name) 328 } 329 330 func testAccKubernetesLimitRangeConfig_metaModified(name string) string { 331 return fmt.Sprintf(` 332 resource "kubernetes_limit_range" "test" { 333 metadata { 334 annotations { 335 TestAnnotationOne = "one" 336 TestAnnotationTwo = "two" 337 } 338 labels { 339 TestLabelOne = "one" 340 TestLabelTwo = "two" 341 TestLabelThree = "three" 342 } 343 name = "%s" 344 } 345 spec { 346 limit { 347 type = "Container" 348 349 default { 350 cpu = "200m" 351 memory = "512M" 352 } 353 354 default_request { 355 cpu = "100m" 356 memory = "256M" 357 } 358 } 359 } 360 } 361 `, name) 362 } 363 364 func testAccKubernetesLimitRangeConfig_specModified(name string) string { 365 return fmt.Sprintf(` 366 resource "kubernetes_limit_range" "test" { 367 metadata { 368 name = "%s" 369 } 370 spec { 371 limit { 372 type = "Container" 373 374 default { 375 cpu = "200m" 376 memory = "1024M" 377 } 378 379 max { 380 cpu = "500m" 381 } 382 383 min { 384 cpu = "10m" 385 memory = "10M" 386 } 387 } 388 } 389 } 390 `, name) 391 } 392 393 func testAccKubernetesLimitRangeConfig_generatedName(prefix string) string { 394 return fmt.Sprintf(` 395 resource "kubernetes_limit_range" "test" { 396 metadata { 397 generate_name = "%s" 398 } 399 spec { 400 limit { 401 type = "Pod" 402 } 403 } 404 } 405 `, prefix) 406 } 407 408 func testAccKubernetesLimitRangeConfig_typeChange(name string) string { 409 return fmt.Sprintf(` 410 resource "kubernetes_limit_range" "test" { 411 metadata { 412 name = "%s" 413 } 414 spec { 415 limit { 416 type = "Container" 417 default { 418 cpu = "200m" 419 memory = "1024M" 420 } 421 } 422 } 423 } 424 `, name) 425 } 426 427 func testAccKubernetesLimitRangeConfig_typeChangeModified(name string) string { 428 return fmt.Sprintf(` 429 resource "kubernetes_limit_range" "test" { 430 metadata { 431 name = "%s" 432 } 433 spec { 434 limit { 435 type = "Pod" 436 min { 437 cpu = "200m" 438 memory = "1024M" 439 } 440 } 441 } 442 } 443 `, name) 444 } 445 446 func testAccKubernetesLimitRangeConfig_multipleLimits(name string) string { 447 return fmt.Sprintf(` 448 resource "kubernetes_limit_range" "test" { 449 metadata { 450 name = "%s" 451 } 452 spec { 453 limit { 454 type = "Pod" 455 max { 456 cpu = "200m" 457 memory = "1024M" 458 } 459 } 460 limit { 461 type = "PersistentVolumeClaim" 462 min { 463 storage = "24M" 464 } 465 } 466 limit { 467 type = "Container" 468 default { 469 cpu = "50m" 470 memory = "24M" 471 } 472 } 473 } 474 } 475 `, name) 476 }