github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_resource_quota_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 TestAccKubernetesResourceQuota_basic(t *testing.T) { 16 var conf api.ResourceQuota 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_resource_quota.test", 22 Providers: testAccProviders, 23 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 24 Steps: []resource.TestStep{ 25 { 26 Config: testAccKubernetesResourceQuotaConfig_basic(name), 27 Check: resource.ComposeAggregateTestCheckFunc( 28 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 29 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "1"), 30 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"), 31 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one"}), 32 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"), 33 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"), 34 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"), 35 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelFour", "four"), 36 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}), 37 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 38 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 39 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 40 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 41 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 42 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"), 43 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"), 44 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"), 45 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"), 46 ), 47 }, 48 { 49 Config: testAccKubernetesResourceQuotaConfig_metaModified(name), 50 Check: resource.ComposeAggregateTestCheckFunc( 51 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 52 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "2"), 53 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationOne", "one"), 54 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 55 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}), 56 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "3"), 57 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelOne", "one"), 58 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelTwo", "two"), 59 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.TestLabelThree", "three"), 60 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 61 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 62 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 63 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 64 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 65 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 66 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "3"), 67 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "2"), 68 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "2Gi"), 69 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "4"), 70 ), 71 }, 72 { 73 Config: testAccKubernetesResourceQuotaConfig_specModified(name), 74 Check: resource.ComposeAggregateTestCheckFunc( 75 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 76 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 77 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 78 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 79 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 80 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 81 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 82 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 83 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 84 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 85 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "4"), 86 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.cpu", "4"), 87 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.requests.cpu", "1"), 88 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.limits.memory", "4Gi"), 89 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 90 ), 91 }, 92 }, 93 }) 94 } 95 96 func TestAccKubernetesResourceQuota_generatedName(t *testing.T) { 97 var conf api.ResourceQuota 98 prefix := "tf-acc-test-" 99 100 resource.Test(t, resource.TestCase{ 101 PreCheck: func() { testAccPreCheck(t) }, 102 IDRefreshName: "kubernetes_resource_quota.test", 103 Providers: testAccProviders, 104 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 105 Steps: []resource.TestStep{ 106 { 107 Config: testAccKubernetesResourceQuotaConfig_generatedName(prefix), 108 Check: resource.ComposeAggregateTestCheckFunc( 109 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 110 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 111 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 112 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 113 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 114 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.generate_name", prefix), 115 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 116 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 117 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 118 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 119 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 120 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 121 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "0"), 122 ), 123 }, 124 }, 125 }) 126 } 127 128 func TestAccKubernetesResourceQuota_withScopes(t *testing.T) { 129 var conf api.ResourceQuota 130 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 131 132 resource.Test(t, resource.TestCase{ 133 PreCheck: func() { testAccPreCheck(t) }, 134 IDRefreshName: "kubernetes_resource_quota.test", 135 Providers: testAccProviders, 136 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 137 Steps: []resource.TestStep{ 138 { 139 Config: testAccKubernetesResourceQuotaConfig_withScopes(name), 140 Check: resource.ComposeAggregateTestCheckFunc( 141 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 142 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 143 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 144 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 145 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 146 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 147 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 148 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 149 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 150 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 151 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 152 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 153 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"), 154 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.193563370", "BestEffort"), 155 ), 156 }, 157 { 158 Config: testAccKubernetesResourceQuotaConfig_withScopesModified(name), 159 Check: resource.ComposeAggregateTestCheckFunc( 160 testAccCheckKubernetesResourceQuotaExists("kubernetes_resource_quota.test", &conf), 161 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.annotations.%", "0"), 162 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}), 163 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.labels.%", "0"), 164 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 165 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "metadata.0.name", name), 166 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.generation"), 167 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.resource_version"), 168 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.self_link"), 169 resource.TestCheckResourceAttrSet("kubernetes_resource_quota.test", "metadata.0.uid"), 170 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.%", "1"), 171 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.hard.pods", "10"), 172 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.#", "1"), 173 resource.TestCheckResourceAttr("kubernetes_resource_quota.test", "spec.0.scopes.3022121741", "NotBestEffort"), 174 ), 175 }, 176 }, 177 }) 178 } 179 180 func TestAccKubernetesResourceQuota_importBasic(t *testing.T) { 181 resourceName := "kubernetes_resource_quota.test" 182 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 183 184 resource.Test(t, resource.TestCase{ 185 PreCheck: func() { testAccPreCheck(t) }, 186 Providers: testAccProviders, 187 CheckDestroy: testAccCheckKubernetesResourceQuotaDestroy, 188 Steps: []resource.TestStep{ 189 { 190 Config: testAccKubernetesResourceQuotaConfig_basic(name), 191 }, 192 { 193 ResourceName: resourceName, 194 ImportState: true, 195 ImportStateVerify: true, 196 }, 197 }, 198 }) 199 } 200 201 func testAccCheckKubernetesResourceQuotaDestroy(s *terraform.State) error { 202 conn := testAccProvider.Meta().(*kubernetes.Clientset) 203 204 for _, rs := range s.RootModule().Resources { 205 if rs.Type != "kubernetes_resource_quota" { 206 continue 207 } 208 namespace, name := idParts(rs.Primary.ID) 209 resp, err := conn.CoreV1().ResourceQuotas(namespace).Get(name, meta_v1.GetOptions{}) 210 if err == nil { 211 if resp.Namespace == namespace && resp.Name == name { 212 return fmt.Errorf("Resource Quota still exists: %s", rs.Primary.ID) 213 } 214 } 215 } 216 217 return nil 218 } 219 220 func testAccCheckKubernetesResourceQuotaExists(n string, obj *api.ResourceQuota) resource.TestCheckFunc { 221 return func(s *terraform.State) error { 222 rs, ok := s.RootModule().Resources[n] 223 if !ok { 224 return fmt.Errorf("Not found: %s", n) 225 } 226 227 conn := testAccProvider.Meta().(*kubernetes.Clientset) 228 namespace, name := idParts(rs.Primary.ID) 229 out, err := conn.CoreV1().ResourceQuotas(namespace).Get(name, meta_v1.GetOptions{}) 230 if err != nil { 231 return err 232 } 233 234 *obj = *out 235 return nil 236 } 237 } 238 239 func testAccKubernetesResourceQuotaConfig_basic(name string) string { 240 return fmt.Sprintf(` 241 resource "kubernetes_resource_quota" "test" { 242 metadata { 243 annotations { 244 TestAnnotationOne = "one" 245 } 246 labels { 247 TestLabelOne = "one" 248 TestLabelThree = "three" 249 TestLabelFour = "four" 250 } 251 name = "%s" 252 } 253 spec { 254 hard { 255 "limits.cpu" = 2 256 "limits.memory" = "2Gi" 257 pods = 4 258 } 259 } 260 } 261 `, name) 262 } 263 264 func testAccKubernetesResourceQuotaConfig_metaModified(name string) string { 265 return fmt.Sprintf(` 266 resource "kubernetes_resource_quota" "test" { 267 metadata { 268 annotations { 269 TestAnnotationOne = "one" 270 TestAnnotationTwo = "two" 271 } 272 labels { 273 TestLabelOne = "one" 274 TestLabelTwo = "two" 275 TestLabelThree = "three" 276 } 277 name = "%s" 278 } 279 spec { 280 hard { 281 "limits.cpu" = 2 282 "limits.memory" = "2Gi" 283 pods = 4 284 } 285 } 286 } 287 `, name) 288 } 289 290 func testAccKubernetesResourceQuotaConfig_specModified(name string) string { 291 return fmt.Sprintf(` 292 resource "kubernetes_resource_quota" "test" { 293 metadata { 294 name = "%s" 295 } 296 spec { 297 hard { 298 "limits.cpu" = 4 299 "requests.cpu" = 1 300 "limits.memory" = "4Gi" 301 pods = 10 302 } 303 } 304 } 305 `, name) 306 } 307 308 func testAccKubernetesResourceQuotaConfig_generatedName(prefix string) string { 309 return fmt.Sprintf(` 310 resource "kubernetes_resource_quota" "test" { 311 metadata { 312 generate_name = "%s" 313 } 314 spec { 315 hard { 316 pods = 10 317 } 318 } 319 } 320 `, prefix) 321 } 322 323 func testAccKubernetesResourceQuotaConfig_withScopes(name string) string { 324 return fmt.Sprintf(` 325 resource "kubernetes_resource_quota" "test" { 326 metadata { 327 name = "%s" 328 } 329 spec { 330 hard { 331 pods = 10 332 } 333 scopes = ["BestEffort"] 334 } 335 } 336 `, name) 337 } 338 339 func testAccKubernetesResourceQuotaConfig_withScopesModified(name string) string { 340 return fmt.Sprintf(` 341 resource "kubernetes_resource_quota" "test" { 342 metadata { 343 name = "%s" 344 } 345 spec { 346 hard { 347 pods = 10 348 } 349 scopes = ["NotBestEffort"] 350 } 351 } 352 `, name) 353 }