github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_claim_test.go (about) 1 package kubernetes 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 api "k8s.io/kubernetes/pkg/api/v1" 13 kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" 14 ) 15 16 func TestAccKubernetesPersistentVolumeClaim_basic(t *testing.T) { 17 var conf api.PersistentVolumeClaim 18 name := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 19 20 resource.Test(t, resource.TestCase{ 21 PreCheck: func() { testAccPreCheck(t) }, 22 IDRefreshName: "kubernetes_persistent_volume_claim.test", 23 Providers: testAccProviders, 24 CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 25 Steps: []resource.TestStep{ 26 { 27 Config: testAccKubernetesPersistentVolumeClaimConfig_basic(name), 28 Check: resource.ComposeAggregateTestCheckFunc( 29 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &conf), 30 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "1"), 31 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.TestAnnotationOne", "one"), 32 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{ 33 "TestAnnotationOne": "one", 34 "volume.beta.kubernetes.io/storage-provisioner": "kubernetes.io/gce-pd", 35 }), 36 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "3"), 37 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelOne", "one"), 38 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelThree", "three"), 39 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelFour", "four"), 40 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelThree": "three", "TestLabelFour": "four"}), 41 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", name), 42 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 43 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 44 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 45 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 46 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 47 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 48 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 49 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 50 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 51 ), 52 }, 53 { 54 Config: testAccKubernetesPersistentVolumeClaimConfig_metaModified(name), 55 Check: resource.ComposeAggregateTestCheckFunc( 56 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &conf), 57 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "2"), 58 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.TestAnnotationOne", "one"), 59 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.TestAnnotationTwo", "two"), 60 testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{ 61 "TestAnnotationOne": "one", 62 "TestAnnotationTwo": "two", 63 "volume.beta.kubernetes.io/storage-provisioner": "kubernetes.io/gce-pd", 64 }), 65 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "3"), 66 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelOne", "one"), 67 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelTwo", "two"), 68 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.TestLabelThree", "three"), 69 testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{"TestLabelOne": "one", "TestLabelTwo": "two", "TestLabelThree": "three"}), 70 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", name), 71 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 72 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 73 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 74 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 75 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 76 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 77 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 78 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 79 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 80 ), 81 }, 82 }, 83 }) 84 } 85 86 func TestAccKubernetesPersistentVolumeClaim_importBasic(t *testing.T) { 87 resourceName := "kubernetes_persistent_volume_claim.test" 88 volumeName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 89 claimName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 90 diskName := fmt.Sprintf("tf-acc-test-disk-%s", acctest.RandString(10)) 91 zone := os.Getenv("GOOGLE_ZONE") 92 93 resource.Test(t, resource.TestCase{ 94 PreCheck: func() { testAccPreCheck(t) }, 95 Providers: testAccProviders, 96 CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 97 Steps: []resource.TestStep{ 98 { 99 Config: testAccKubernetesPersistentVolumeClaimConfig_import(volumeName, claimName, diskName, zone), 100 }, 101 { 102 ResourceName: resourceName, 103 ImportState: true, 104 ImportStateVerify: true, 105 }, 106 }, 107 }) 108 } 109 110 func TestAccKubernetesPersistentVolumeClaim_volumeMatch(t *testing.T) { 111 var pvcConf api.PersistentVolumeClaim 112 var pvConf api.PersistentVolume 113 114 claimName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 115 volumeName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 116 volumeNameModified := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 117 diskName := fmt.Sprintf("tf-acc-test-disk-%s", acctest.RandString(10)) 118 zone := os.Getenv("GOOGLE_ZONE") 119 120 resource.Test(t, resource.TestCase{ 121 PreCheck: func() { testAccPreCheck(t) }, 122 IDRefreshName: "kubernetes_persistent_volume_claim.test", 123 Providers: testAccProviders, 124 CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 125 Steps: []resource.TestStep{ 126 { 127 Config: testAccKubernetesPersistentVolumeClaimConfig_volumeMatch(volumeName, claimName, diskName, zone), 128 Check: resource.ComposeAggregateTestCheckFunc( 129 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &pvcConf), 130 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 131 testAccCheckMetaAnnotations(&pvcConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes"}), 132 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 133 testAccCheckMetaLabels(&pvcConf.ObjectMeta, map[string]string{}), 134 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 135 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 136 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 137 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 138 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 139 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 140 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 141 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 142 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 143 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 144 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.volume_name", volumeName), 145 testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &pvConf), 146 testAccCheckMetaAnnotations(&pvConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bound-by-controller": "yes"}), 147 ), 148 }, 149 { 150 Config: testAccKubernetesPersistentVolumeClaimConfig_volumeMatch_modified(volumeNameModified, claimName, diskName, zone), 151 Check: resource.ComposeAggregateTestCheckFunc( 152 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &pvcConf), 153 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 154 testAccCheckMetaAnnotations(&pvcConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes"}), 155 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 156 testAccCheckMetaLabels(&pvcConf.ObjectMeta, map[string]string{}), 157 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 158 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 159 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 160 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 161 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 162 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 163 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 164 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 165 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 166 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 167 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.volume_name", volumeNameModified), 168 testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test2", &pvConf), 169 testAccCheckMetaAnnotations(&pvConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bound-by-controller": "yes"}), 170 ), 171 }, 172 }, 173 }) 174 } 175 176 // Label matching isn't supported on GCE 177 // TODO: Re-enable when we build test env for K8S that supports it 178 179 // func TestAccKubernetesPersistentVolumeClaim_labelsMatch(t *testing.T) { 180 // var conf api.PersistentVolumeClaim 181 // claimName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 182 // volumeName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 183 184 // resource.Test(t, resource.TestCase{ 185 // PreCheck: func() { testAccPreCheck(t) }, 186 // IDRefreshName: "kubernetes_persistent_volume_claim.test", 187 // Providers: testAccProviders, 188 // CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 189 // Steps: []resource.TestStep{ 190 // { 191 // Config: testAccKubernetesPersistentVolumeClaimConfig_labelsMatch(volumeName, claimName), 192 // Check: resource.ComposeAggregateTestCheckFunc( 193 // testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &conf), 194 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 195 // testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes", "pv.kubernetes.io/bound-by-controller": "yes"}), 196 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 197 // testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 198 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 199 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 200 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 201 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 202 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 203 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 204 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 205 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 206 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 207 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 208 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.#", "1"), 209 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_labels.%", "1"), 210 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_labels.TfAccTestEnvironment", "blablah"), 211 // ), 212 // }, 213 // }, 214 // }) 215 // } 216 217 // func TestAccKubernetesPersistentVolumeClaim_labelsMatchExpression(t *testing.T) { 218 // var conf api.PersistentVolumeClaim 219 // claimName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 220 // volumeName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 221 222 // resource.Test(t, resource.TestCase{ 223 // PreCheck: func() { testAccPreCheck(t) }, 224 // IDRefreshName: "kubernetes_persistent_volume_claim.test", 225 // Providers: testAccProviders, 226 // CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 227 // Steps: []resource.TestStep{ 228 // { 229 // Config: testAccKubernetesPersistentVolumeClaimConfig_labelsMatchExpression(volumeName, claimName), 230 // Check: resource.ComposeAggregateTestCheckFunc( 231 // testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &conf), 232 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 233 // testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes", "pv.kubernetes.io/bound-by-controller": "yes"}), 234 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 235 // testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}), 236 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 237 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 238 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 239 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 240 // resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 241 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 242 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 243 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 244 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 245 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 246 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.#", "1"), 247 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.#", "1"), 248 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.key", "TfAccTestEnvironment"), 249 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.operator", "In"), 250 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.values.#", "3"), 251 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.values.1187371253", "three"), 252 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.values.2053932785", "one"), 253 // resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.selector.0.match_expressions.0.values.298486374", "two"), 254 // ), 255 // }, 256 // }, 257 // }) 258 // } 259 260 func TestAccKubernetesPersistentVolumeClaim_volumeUpdate(t *testing.T) { 261 var pvcConf api.PersistentVolumeClaim 262 var pvConf api.PersistentVolume 263 264 claimName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 265 volumeName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(10)) 266 diskName := fmt.Sprintf("tf-acc-test-disk-%s", acctest.RandString(10)) 267 zone := os.Getenv("GOOGLE_ZONE") 268 269 resource.Test(t, resource.TestCase{ 270 PreCheck: func() { testAccPreCheck(t) }, 271 IDRefreshName: "kubernetes_persistent_volume_claim.test", 272 Providers: testAccProviders, 273 CheckDestroy: testAccCheckKubernetesPersistentVolumeClaimDestroy, 274 Steps: []resource.TestStep{ 275 { 276 Config: testAccKubernetesPersistentVolumeClaimConfig_volumeUpdate(volumeName, claimName, "5Gi", diskName, zone), 277 Check: resource.ComposeAggregateTestCheckFunc( 278 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &pvcConf), 279 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 280 testAccCheckMetaAnnotations(&pvcConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes"}), 281 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 282 testAccCheckMetaLabels(&pvcConf.ObjectMeta, map[string]string{}), 283 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 284 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 285 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 286 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 287 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 288 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 289 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 290 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 291 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 292 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 293 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.volume_name", volumeName), 294 testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &pvConf), 295 testAccCheckMetaAnnotations(&pvConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bound-by-controller": "yes"}), 296 testAccCheckClaimRef(&pvConf, &ObjectRefStatic{Namespace: "default", Name: claimName}), 297 ), 298 }, 299 { 300 Config: testAccKubernetesPersistentVolumeClaimConfig_volumeUpdate(volumeName, claimName, "10Gi", diskName, zone), 301 Check: resource.ComposeAggregateTestCheckFunc( 302 testAccCheckKubernetesPersistentVolumeClaimExists("kubernetes_persistent_volume_claim.test", &pvcConf), 303 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.annotations.%", "0"), 304 testAccCheckMetaAnnotations(&pvcConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bind-completed": "yes"}), 305 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.labels.%", "0"), 306 testAccCheckMetaLabels(&pvcConf.ObjectMeta, map[string]string{}), 307 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "metadata.0.name", claimName), 308 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.generation"), 309 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.resource_version"), 310 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.self_link"), 311 resource.TestCheckResourceAttrSet("kubernetes_persistent_volume_claim.test", "metadata.0.uid"), 312 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.#", "1"), 313 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.access_modes.1254135962", "ReadWriteMany"), 314 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.#", "1"), 315 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.%", "1"), 316 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.resources.0.requests.storage", "5Gi"), 317 resource.TestCheckResourceAttr("kubernetes_persistent_volume_claim.test", "spec.0.volume_name", volumeName), 318 testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &pvConf), 319 testAccCheckMetaAnnotations(&pvConf.ObjectMeta, map[string]string{"pv.kubernetes.io/bound-by-controller": "yes"}), 320 testAccCheckClaimRef(&pvConf, &ObjectRefStatic{Namespace: "default", Name: claimName}), 321 ), 322 }, 323 }, 324 }) 325 } 326 327 func testAccCheckKubernetesPersistentVolumeClaimDestroy(s *terraform.State) error { 328 conn := testAccProvider.Meta().(*kubernetes.Clientset) 329 330 for _, rs := range s.RootModule().Resources { 331 if rs.Type != "kubernetes_persistent_volume_claim" { 332 continue 333 } 334 namespace, name := idParts(rs.Primary.ID) 335 resp, err := conn.CoreV1().PersistentVolumeClaims(namespace).Get(name, meta_v1.GetOptions{}) 336 if err == nil { 337 if resp.Namespace == namespace && resp.Name == name { 338 return fmt.Errorf("Persistent Volume still exists: %s", rs.Primary.ID) 339 } 340 } 341 } 342 343 return nil 344 } 345 346 func testAccCheckKubernetesPersistentVolumeClaimExists(n string, obj *api.PersistentVolumeClaim) resource.TestCheckFunc { 347 return func(s *terraform.State) error { 348 rs, ok := s.RootModule().Resources[n] 349 if !ok { 350 return fmt.Errorf("Not found: %s", n) 351 } 352 353 conn := testAccProvider.Meta().(*kubernetes.Clientset) 354 namespace, name := idParts(rs.Primary.ID) 355 out, err := conn.CoreV1().PersistentVolumeClaims(namespace).Get(name, meta_v1.GetOptions{}) 356 if err != nil { 357 return err 358 } 359 360 *obj = *out 361 return nil 362 } 363 } 364 365 func testAccCheckClaimRef(pv *api.PersistentVolume, expected *ObjectRefStatic) resource.TestCheckFunc { 366 return func(s *terraform.State) error { 367 or := pv.Spec.ClaimRef 368 if or == nil { 369 return fmt.Errorf("Expected ClaimRef to be not-nil, specifically %#v", *expected) 370 } 371 if or.Namespace != expected.Namespace { 372 return fmt.Errorf("Expected object reference %q, given: %q", expected.Namespace, or.Namespace) 373 } 374 if or.Name != expected.Name { 375 return fmt.Errorf("Expected object reference %q, given: %q", expected.Name, or.Name) 376 } 377 return nil 378 } 379 } 380 381 type ObjectRefStatic struct { 382 Namespace string 383 Name string 384 } 385 386 func testAccKubernetesPersistentVolumeClaimConfig_basic(name string) string { 387 return fmt.Sprintf(` 388 resource "kubernetes_persistent_volume_claim" "test" { 389 metadata { 390 annotations { 391 TestAnnotationOne = "one" 392 } 393 labels { 394 TestLabelOne = "one" 395 TestLabelThree = "three" 396 TestLabelFour = "four" 397 } 398 name = "%s" 399 } 400 spec { 401 access_modes = ["ReadWriteMany"] 402 resources { 403 requests { 404 storage = "5Gi" 405 } 406 } 407 selector { 408 match_expressions { 409 key = "environment" 410 operator = "In" 411 values = ["non-exists-12345"] 412 } 413 } 414 } 415 wait_until_bound = false 416 } 417 `, name) 418 } 419 420 func testAccKubernetesPersistentVolumeClaimConfig_metaModified(name string) string { 421 return fmt.Sprintf(` 422 resource "kubernetes_persistent_volume_claim" "test" { 423 metadata { 424 annotations { 425 TestAnnotationOne = "one" 426 TestAnnotationTwo = "two" 427 } 428 labels { 429 TestLabelOne = "one" 430 TestLabelTwo = "two" 431 TestLabelThree = "three" 432 } 433 name = "%s" 434 } 435 spec { 436 access_modes = ["ReadWriteMany"] 437 resources { 438 requests { 439 storage = "5Gi" 440 } 441 } 442 selector { 443 match_expressions { 444 key = "environment" 445 operator = "In" 446 values = ["non-exists-12345"] 447 } 448 } 449 } 450 wait_until_bound = false 451 } 452 `, name) 453 } 454 455 func testAccKubernetesPersistentVolumeClaimConfig_import(volumeName, claimName, diskName, zone string) string { 456 return fmt.Sprintf(` 457 resource "kubernetes_persistent_volume" "test" { 458 metadata { 459 name = "%s" 460 } 461 spec { 462 capacity { 463 storage = "10Gi" 464 } 465 access_modes = ["ReadWriteMany"] 466 persistent_volume_source { 467 gce_persistent_disk { 468 pd_name = "${google_compute_disk.test.name}" 469 } 470 } 471 } 472 } 473 474 resource "google_compute_disk" "test" { 475 name = "%s" 476 type = "pd-ssd" 477 zone = "%s" 478 image = "debian-8-jessie-v20170523" 479 size = 10 480 } 481 482 resource "kubernetes_persistent_volume_claim" "test" { 483 metadata { 484 name = "%s" 485 } 486 spec { 487 access_modes = ["ReadWriteMany"] 488 resources { 489 requests { 490 storage = "5Gi" 491 } 492 } 493 volume_name = "${kubernetes_persistent_volume.test.metadata.0.name}" 494 } 495 } 496 `, volumeName, diskName, zone, claimName) 497 } 498 499 func testAccKubernetesPersistentVolumeClaimConfig_volumeMatch(volumeName, claimName, diskName, zone string) string { 500 return fmt.Sprintf(` 501 resource "kubernetes_persistent_volume" "test" { 502 metadata { 503 name = "%s" 504 } 505 spec { 506 capacity { 507 storage = "10Gi" 508 } 509 access_modes = ["ReadWriteMany"] 510 persistent_volume_source { 511 gce_persistent_disk { 512 pd_name = "${google_compute_disk.test.name}" 513 } 514 } 515 } 516 } 517 518 resource "google_compute_disk" "test" { 519 name = "%s" 520 type = "pd-ssd" 521 zone = "%s" 522 image = "debian-8-jessie-v20170523" 523 size = 10 524 } 525 526 resource "kubernetes_persistent_volume_claim" "test" { 527 metadata { 528 name = "%s" 529 } 530 spec { 531 access_modes = ["ReadWriteMany"] 532 resources { 533 requests { 534 storage = "5Gi" 535 } 536 } 537 volume_name = "${kubernetes_persistent_volume.test.metadata.0.name}" 538 } 539 } 540 `, volumeName, diskName, zone, claimName) 541 } 542 543 func testAccKubernetesPersistentVolumeClaimConfig_volumeMatch_modified(volumeName, claimName, diskName, zone string) string { 544 return fmt.Sprintf(` 545 resource "kubernetes_persistent_volume" "test2" { 546 metadata { 547 name = "%s" 548 } 549 spec { 550 capacity { 551 storage = "10Gi" 552 } 553 access_modes = ["ReadWriteMany"] 554 persistent_volume_source { 555 gce_persistent_disk { 556 pd_name = "${google_compute_disk.test.name}" 557 } 558 } 559 } 560 } 561 562 resource "google_compute_disk" "test" { 563 name = "%s" 564 type = "pd-ssd" 565 zone = "%s" 566 image = "debian-8-jessie-v20170523" 567 size = 10 568 } 569 570 resource "kubernetes_persistent_volume_claim" "test" { 571 metadata { 572 name = "%s" 573 } 574 spec { 575 access_modes = ["ReadWriteMany"] 576 resources { 577 requests { 578 storage = "5Gi" 579 } 580 } 581 volume_name = "${kubernetes_persistent_volume.test2.metadata.0.name}" 582 } 583 } 584 `, volumeName, diskName, zone, claimName) 585 } 586 587 // func testAccKubernetesPersistentVolumeClaimConfig_labelsMatch(volumeName, claimName string) string { 588 // return fmt.Sprintf(` 589 // resource "kubernetes_persistent_volume" "test" { 590 // metadata { 591 // labels { 592 // TfAccTestEnvironment = "blablah" 593 // } 594 // name = "%s" 595 // } 596 // spec { 597 // capacity { 598 // storage = "10Gi" 599 // } 600 // access_modes = ["ReadWriteMany"] 601 // persistent_volume_source { 602 // gce_persistent_disk { 603 // pd_name = "test123" 604 // } 605 // } 606 // } 607 // } 608 609 // resource "kubernetes_persistent_volume_claim" "test" { 610 // metadata { 611 // name = "%s" 612 // } 613 // spec { 614 // access_modes = ["ReadWriteMany"] 615 // resources { 616 // requests { 617 // storage = "5Gi" 618 // } 619 // } 620 // selector { 621 // match_labels { 622 // TfAccTestEnvironment = "blablah" 623 // } 624 // } 625 // } 626 // } 627 // `, volumeName, claimName) 628 // } 629 630 // func testAccKubernetesPersistentVolumeClaimConfig_labelsMatchExpression(volumeName, claimName string) string { 631 // return fmt.Sprintf(` 632 // resource "kubernetes_persistent_volume" "test" { 633 // metadata { 634 // labels { 635 // TfAccTestEnvironment = "two" 636 // } 637 // name = "%s" 638 // } 639 // spec { 640 // capacity { 641 // storage = "10Gi" 642 // } 643 // access_modes = ["ReadWriteMany"] 644 // persistent_volume_source { 645 // gce_persistent_disk { 646 // pd_name = "test123" 647 // } 648 // } 649 // } 650 // } 651 652 // resource "kubernetes_persistent_volume_claim" "test" { 653 // metadata { 654 // name = "%s" 655 // } 656 // spec { 657 // access_modes = ["ReadWriteMany"] 658 // resources { 659 // requests { 660 // storage = "5Gi" 661 // } 662 // } 663 // selector { 664 // match_expressions { 665 // key = "TfAccTestEnvironment" 666 // operator = "In" 667 // values = ["one", "three", "two"] 668 // } 669 // } 670 // } 671 // } 672 // `, volumeName, claimName) 673 // } 674 675 func testAccKubernetesPersistentVolumeClaimConfig_volumeUpdate(volumeName, claimName, storage, diskName, zone string) string { 676 return fmt.Sprintf(` 677 resource "kubernetes_persistent_volume" "test" { 678 metadata { 679 name = "%s" 680 } 681 spec { 682 capacity { 683 storage = "%s" 684 } 685 access_modes = ["ReadWriteMany"] 686 persistent_volume_source { 687 gce_persistent_disk { 688 pd_name = "${google_compute_disk.test.name}" 689 } 690 } 691 } 692 } 693 694 resource "google_compute_disk" "test" { 695 name = "%s" 696 type = "pd-ssd" 697 zone = "%s" 698 image = "debian-8-jessie-v20170523" 699 size = 10 700 } 701 702 resource "kubernetes_persistent_volume_claim" "test" { 703 metadata { 704 name = "%s" 705 } 706 spec { 707 access_modes = ["ReadWriteMany"] 708 resources { 709 requests { 710 storage = "5Gi" 711 } 712 } 713 volume_name = "${kubernetes_persistent_volume.test.metadata.0.name}" 714 } 715 } 716 `, volumeName, storage, diskName, zone, claimName) 717 }