diff --git a/kubernetes/resource_kubernetes_pod_test.go b/kubernetes/resource_kubernetes_pod_test.go index b58c3d535c..67c7adeac8 100644 --- a/kubernetes/resource_kubernetes_pod_test.go +++ b/kubernetes/resource_kubernetes_pod_test.go @@ -17,6 +17,7 @@ import ( func TestAccKubernetesPod_minimal(t *testing.T) { name := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -26,11 +27,17 @@ func TestAccKubernetesPod_minimal(t *testing.T) { { Config: testAccKubernetesPodConfigMinimal(name, busyboxImageVersion), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigMinimal(name, busyboxImageVersion), PlanOnly: true, @@ -47,6 +54,7 @@ func TestAccKubernetesPod_basic(t *testing.T) { configMapName := acctest.RandomWithPrefix("tf-acc-test") imageName1 := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -56,35 +64,35 @@ func TestAccKubernetesPod_basic(t *testing.T) { { Config: testAccKubernetesPodConfigBasic(secretName, configMapName, podName, imageName1), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.labels.%", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.labels.app", "pod_label"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.name", secretName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.key", "one"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.optional", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.name", configMapName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.key", "one"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.optional", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.0.config_map_ref.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.0.config_map_ref.0.name", fmt.Sprintf("%s-from", configMapName)), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.0.config_map_ref.0.optional", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.0.prefix", "FROM_CM_"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.1.secret_ref.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.1.secret_ref.0.name", fmt.Sprintf("%s-from", secretName)), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.1.secret_ref.0.optional", "false"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env_from.1.prefix", "FROM_S_"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.topology_spread_constraint.#", "0"), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.labels.%", "1"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.labels.app", "pod_label"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.name", secretName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.key", "one"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.value_from.0.secret_key_ref.0.optional", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.name", configMapName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.key", "one"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.1.value_from.0.config_map_key_ref.0.optional", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.0.config_map_ref.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.0.config_map_ref.0.name", fmt.Sprintf("%s-from", configMapName)), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.0.config_map_ref.0.optional", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.0.prefix", "FROM_CM_"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.1.secret_ref.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.1.secret_ref.0.name", fmt.Sprintf("%s-from", secretName)), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.1.secret_ref.0.optional", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env_from.1.prefix", "FROM_S_"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName1), + resource.TestCheckResourceAttr(resourceName, "spec.0.topology_spread_constraint.#", "0"), ), }, { - ResourceName: "kubernetes_pod.test", + ResourceName: resourceName, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, @@ -99,6 +107,7 @@ func TestAccKubernetesPod_initContainer_updateForcesNew(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") image := busyboxImageVersion image1 := busyboxImageVersion1 + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -108,21 +117,27 @@ func TestAccKubernetesPod_initContainer_updateForcesNew(t *testing.T) { { Config: testAccKubernetesPodConfigWithInitContainer(podName, image), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "container"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.init_container.0.name", "initcontainer"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.init_container.0.image", image), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "container"), + resource.TestCheckResourceAttr(resourceName, "spec.0.init_container.0.name", "initcontainer"), + resource.TestCheckResourceAttr(resourceName, "spec.0.init_container.0.image", image), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigWithInitContainer(podName, image1), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf2), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "container"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.init_container.0.name", "initcontainer"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.init_container.0.image", image1), + testAccCheckKubernetesPodExists(resourceName, &conf2), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "container"), + resource.TestCheckResourceAttr(resourceName, "spec.0.init_container.0.name", "initcontainer"), + resource.TestCheckResourceAttr(resourceName, "spec.0.init_container.0.image", image1), testAccCheckKubernetesPodForceNew(&conf1, &conf2, true), ), }, @@ -139,6 +154,7 @@ func TestAccKubernetesPod_updateArgsForceNew(t *testing.T) { imageName := "hashicorp/http-echo:latest" argsBefore := `["-listen=:80", "-text='before modification'"]` argsAfter := `["-listen=:80", "-text='after modification'"]` + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -148,33 +164,39 @@ func TestAccKubernetesPod_updateArgsForceNew(t *testing.T) { { Config: testAccKubernetesPodConfigArgsUpdate(podName, imageName, argsBefore), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.0", "-listen=:80"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.1", "-text='before modification'"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "containername"), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.0", "-listen=:80"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.1", "-text='before modification'"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "containername"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigArgsUpdate(podName, imageName, argsAfter), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf2), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.0", "-listen=:80"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.1", "-text='after modification'"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "containername"), + testAccCheckKubernetesPodExists(resourceName, &conf2), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.0", "-listen=:80"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.1", "-text='after modification'"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "containername"), testAccCheckKubernetesPodForceNew(&conf1, &conf2, true), ), }, @@ -191,6 +213,7 @@ func TestAccKubernetesPod_updateEnvForceNew(t *testing.T) { imageName := "hashicorp/http-echo:latest" envBefore := "bar" envAfter := "baz" + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -200,33 +223,39 @@ func TestAccKubernetesPod_updateEnvForceNew(t *testing.T) { { Config: testAccKubernetesPodConfigEnvUpdate(podName, imageName, envBefore), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.name", "foo"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.value", "bar"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "containername"), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.name", "foo"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.value", "bar"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "containername"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigEnvUpdate(podName, imageName, envAfter), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf2), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", podName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.name", "foo"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.env.0.value", "baz"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.name", "containername"), + testAccCheckKubernetesPodExists(resourceName, &conf2), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", podName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.name", "foo"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.env.0.value", "baz"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.name", "containername"), testAccCheckKubernetesPodForceNew(&conf1, &conf2, true), ), }, @@ -239,6 +268,7 @@ func TestAccKubernetesPod_with_pod_security_context(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -248,14 +278,20 @@ func TestAccKubernetesPod_with_pod_security_context(t *testing.T) { { Config: testAccKubernetesPodConfigWithSecurityContext(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.fs_group", "100"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.run_as_non_root", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.run_as_user", "101"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.supplemental_groups.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.supplemental_groups.0", "101"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.fs_group", "100"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.run_as_non_root", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.run_as_user", "101"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.supplemental_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.supplemental_groups.0", "101"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -265,6 +301,7 @@ func TestAccKubernetesPod_with_pod_security_context_run_as_group(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); skipIfUnsupportedSecurityContextRunAsGroup(t) }, @@ -274,15 +311,21 @@ func TestAccKubernetesPod_with_pod_security_context_run_as_group(t *testing.T) { { Config: testAccKubernetesPodConfigWithSecurityContextRunAsGroup(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.fs_group", "100"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.run_as_group", "100"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.run_as_non_root", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.run_as_user", "101"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.supplemental_groups.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.security_context.0.supplemental_groups.0", "101"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.fs_group", "100"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.run_as_group", "100"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.run_as_non_root", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.run_as_user", "101"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.supplemental_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.security_context.0.supplemental_groups.0", "101"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -292,6 +335,7 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_exec(t *testing.T) podName := acctest.RandomWithPrefix("tf-acc-test") imageName := "gcr.io/google_containers/busybox" + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -301,17 +345,23 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_exec(t *testing.T) { Config: testAccKubernetesPodConfigWithLivenessProbeUsingExec(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.#", "3"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.exec.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.exec.0.command.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.exec.0.command.0", "cat"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.exec.0.command.1", "/tmp/healthy"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.failure_threshold", "3"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.initial_delay_seconds", "5"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.#", "3"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.exec.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.exec.0.command.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.exec.0.command.0", "cat"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.exec.0.command.1", "/tmp/healthy"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.failure_threshold", "3"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.initial_delay_seconds", "5"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -321,6 +371,7 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_http_get(t *testin podName := acctest.RandomWithPrefix("tf-acc-test") imageName := "gcr.io/google_containers/liveness" + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -330,18 +381,24 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_http_get(t *testin { Config: testAccKubernetesPodConfigWithLivenessProbeUsingHTTPGet(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.0.path", "/healthz"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.0.port", "8080"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.0.http_header.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.0.http_header.0.name", "X-Custom-Header"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.http_get.0.http_header.0.value", "Awesome"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.initial_delay_seconds", "3"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.0.path", "/healthz"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.0.port", "8080"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.0.http_header.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.0.http_header.0.name", "X-Custom-Header"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.http_get.0.http_header.0.value", "Awesome"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.initial_delay_seconds", "3"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -351,6 +408,7 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_tcp(t *testing.T) podName := acctest.RandomWithPrefix("tf-acc-test") imageName := "gcr.io/google_containers/liveness" + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -360,13 +418,19 @@ func TestAccKubernetesPod_with_container_liveness_probe_using_tcp(t *testing.T) { Config: testAccKubernetesPodConfigWithLivenessProbeUsingTCP(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.args.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.tcp_socket.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.liveness_probe.0.tcp_socket.0.port", "8080"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.args.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.tcp_socket.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.liveness_probe.0.tcp_socket.0.port", "8080"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -376,6 +440,7 @@ func TestAccKubernetesPod_with_container_lifecycle(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := "gcr.io/google_containers/liveness" + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -385,19 +450,25 @@ func TestAccKubernetesPod_with_container_lifecycle(t *testing.T) { { Config: testAccKubernetesPodConfigWithLifeCycle(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.post_start.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.post_start.0.exec.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.0", "ls"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.1", "-al"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.pre_stop.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.pre_stop.0.exec.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.pre_stop.0.exec.0.command.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.lifecycle.0.pre_stop.0.exec.0.command.0", "date"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.post_start.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.post_start.0.exec.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.0", "ls"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.post_start.0.exec.0.command.1", "-al"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.pre_stop.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.pre_stop.0.exec.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.pre_stop.0.exec.0.command.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.lifecycle.0.pre_stop.0.exec.0.command.0", "date"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -407,6 +478,7 @@ func TestAccKubernetesPod_with_container_security_context(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -416,18 +488,24 @@ func TestAccKubernetesPod_with_container_security_context(t *testing.T) { { Config: testAccKubernetesPodConfigWithContainerSecurityContext(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.privileged", "true"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.run_as_user", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.se_linux_options.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.se_linux_options.0.level", "s0:c123,c456"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.capabilities.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.capabilities.0.add.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.capabilities.0.add.0", "NET_ADMIN"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.security_context.0.capabilities.0.add.1", "SYS_TIME"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.privileged", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.run_as_user", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.se_linux_options.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.se_linux_options.0.level", "s0:c123,c456"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.capabilities.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.capabilities.0.add.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.capabilities.0.add.0", "NET_ADMIN"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.security_context.0.capabilities.0.add.1", "SYS_TIME"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -439,6 +517,7 @@ func TestAccKubernetesPod_with_volume_mount(t *testing.T) { secretName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -448,16 +527,22 @@ func TestAccKubernetesPod_with_volume_mount(t *testing.T) { { Config: testAccKubernetesPodConfigWithVolumeMounts(secretName, podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_path", "/tmp/my_path"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.name", "db"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.read_only", "false"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.sub_path", ""), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_propagation", "HostToContainer"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_path", "/tmp/my_path"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.name", "db"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.read_only", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.sub_path", ""), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_propagation", "HostToContainer"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -468,6 +553,7 @@ func TestAccKubernetesPod_with_cfg_map_volume_mount(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") cfgMap := acctest.RandomWithPrefix("tf-acc-test") imageName := busyboxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -477,21 +563,27 @@ func TestAccKubernetesPod_with_cfg_map_volume_mount(t *testing.T) { { Config: testAccKubernetesPodConfigWithConfigMapVolume(cfgMap, podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_path", "/tmp/my_path"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.name", "cfg"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.read_only", "false"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.sub_path", ""), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_propagation", "None"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.1.mount_path", "/tmp/my_raw_path"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.1.name", "cfg-binary"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.1.read_only", "false"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.1.sub_path", ""), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.name", "cfg"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.config_map.0.name", cfgMap), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.config_map.0.default_mode", "0777")), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_path", "/tmp/my_path"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.name", "cfg"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.read_only", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.sub_path", ""), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_propagation", "None"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.1.mount_path", "/tmp/my_raw_path"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.1.name", "cfg-binary"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.1.read_only", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.1.sub_path", ""), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.name", "cfg"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.config_map.0.name", cfgMap), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.config_map.0.default_mode", "0777")), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, }, }, }) @@ -505,6 +597,7 @@ func TestAccKubernetesPod_with_projected_volume(t *testing.T) { secretName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) imageName := busyboxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -514,31 +607,37 @@ func TestAccKubernetesPod_with_projected_volume(t *testing.T) { { Config: testAccKubernetesPodProjectedVolume(cfgMapName, cfgMap2Name, secretName, podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.name", "projected-vol"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.default_mode", "0777"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.#", "4"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.0.config_map.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.0.config_map.0.name", cfgMapName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.1.config_map.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.1.config_map.0.name", cfgMap2Name), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.2.secret.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.2.secret.0.name", secretName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.#", "2"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.path", "labels"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.field_ref.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.field_ref.0.field_path", "metadata.labels"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.path", "cpu_limit"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.container_name", "containername"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.resource", "limits.cpu"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.divisor", "1"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.name", "projected-vol"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.default_mode", "0777"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.#", "4"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.0.config_map.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.0.config_map.0.name", cfgMapName), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.1.config_map.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.1.config_map.0.name", cfgMap2Name), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.2.secret.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.2.secret.0.name", secretName), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.#", "2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.path", "labels"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.field_ref.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.field_ref.0.field_path", "metadata.labels"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.path", "cpu_limit"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.container_name", "containername"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.resource", "limits.cpu"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.0.divisor", "1"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -548,6 +647,7 @@ func TestAccKubernetesPod_with_resource_requirements(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -557,16 +657,22 @@ func TestAccKubernetesPod_with_resource_requirements(t *testing.T) { { Config: testAccKubernetesPodConfigWithResourceRequirements(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.memory", "50Mi"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.cpu", "250m"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.requests.ephemeral-storage", "128Mi"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.memory", "512Mi"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.cpu", "500m"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.resources.0.limits.ephemeral-storage", "512Mi"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.requests.memory", "50Mi"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.requests.cpu", "250m"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.requests.ephemeral-storage", "128Mi"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.limits.memory", "512Mi"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.limits.cpu", "500m"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.resources.0.limits.ephemeral-storage", "512Mi"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -576,6 +682,7 @@ func TestAccKubernetesPod_with_empty_dir_volume(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -585,14 +692,20 @@ func TestAccKubernetesPod_with_empty_dir_volume(t *testing.T) { { Config: testAccKubernetesPodConfigWithEmptyDirVolumes(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_path", "/cache"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.name", "cache-volume"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.empty_dir.0.medium", "Memory"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_path", "/cache"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.name", "cache-volume"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.empty_dir.0.medium", "Memory"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -602,6 +715,7 @@ func TestAccKubernetesPod_with_empty_dir_volume_with_sizeLimit(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -611,15 +725,21 @@ func TestAccKubernetesPod_with_empty_dir_volume_with_sizeLimit(t *testing.T) { { Config: testAccKubernetesPodConfigWithEmptyDirVolumesSizeLimit(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.mount_path", "/cache"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.volume_mount.0.name", "cache-volume"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.empty_dir.0.medium", "Memory"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.empty_dir.0.size_limit", "512Mi"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.mount_path", "/cache"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.volume_mount.0.name", "cache-volume"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.empty_dir.0.medium", "Memory"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.empty_dir.0.size_limit", "512Mi"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -630,6 +750,7 @@ func TestAccKubernetesPod_with_secret_vol_items(t *testing.T) { secretName := acctest.RandomWithPrefix("tf-acc-test") podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -639,13 +760,19 @@ func TestAccKubernetesPod_with_secret_vol_items(t *testing.T) { { Config: testAccKubernetesPodConfigWithSecretItemsVolume(secretName, podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.secret.0.items.#", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.secret.0.items.0.key", "one"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.volume.0.secret.0.items.0.path", "path/to/one"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.secret.0.items.#", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.secret.0.items.0.key", "one"), + resource.TestCheckResourceAttr(resourceName, "spec.0.volume.0.secret.0.items.0.path", "path/to/one"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -656,6 +783,7 @@ func TestAccKubernetesPod_gke_with_nodeSelector(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion region := os.Getenv("GOOGLE_REGION") + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); skipIfNotRunningInGke(t) }, @@ -665,12 +793,18 @@ func TestAccKubernetesPod_gke_with_nodeSelector(t *testing.T) { { Config: testAccKubernetesPodConfigNodeSelector(podName, imageName, region), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.node_selector.%", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.node_selector.failure-domain.beta.kubernetes.io/region", region), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), + resource.TestCheckResourceAttr(resourceName, "spec.0.node_selector.%", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.node_selector.failure-domain.beta.kubernetes.io/region", region), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -682,6 +816,7 @@ func TestAccKubernetesPod_config_with_automount_service_account_token(t *testing podName := acctest.RandomWithPrefix("tf-acc-test") saName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -692,10 +827,16 @@ func TestAccKubernetesPod_config_with_automount_service_account_token(t *testing Config: testAccKubernetesPodConfigWithAutomountServiceAccountToken(saName, podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckKubernetesServiceAccountExists("kubernetes_service_account.test", &confSA), - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.automount_service_account_token", "true"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "spec.0.automount_service_account_token", "true"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -705,6 +846,7 @@ func TestAccKubernetesPod_config_container_working_dir(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -714,17 +856,23 @@ func TestAccKubernetesPod_config_container_working_dir(t *testing.T) { { Config: testAccKubernetesPodConfigWorkingDir(podName, imageName, "/www"), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.generation", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.working_dir", "/www"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "metadata.0.generation", "0"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.working_dir", "/www"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigWorkingDir(podName, imageName, "/srv"), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.generation", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.working_dir", "/srv"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "metadata.0.generation", "0"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.working_dir", "/srv"), ), }, }, @@ -736,6 +884,7 @@ func TestAccKubernetesPod_config_container_startup_probe(t *testing.T) { podName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -748,14 +897,20 @@ func TestAccKubernetesPod_config_container_startup_probe(t *testing.T) { { Config: testAccKubernetesPodContainerStartupProbe(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.generation", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.startup_probe.0.http_get.0.path", "/index.html"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.startup_probe.0.http_get.0.port", "80"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.startup_probe.0.initial_delay_seconds", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.startup_probe.0.timeout_seconds", "2"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "metadata.0.generation", "0"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.startup_probe.0.http_get.0.path", "/index.html"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.startup_probe.0.http_get.0.port", "80"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.startup_probe.0.initial_delay_seconds", "1"), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.startup_probe.0.timeout_seconds", "2"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -765,6 +920,7 @@ func TestAccKubernetesPod_termination_message_policy_default(t *testing.T) { podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -776,10 +932,16 @@ func TestAccKubernetesPod_termination_message_policy_default(t *testing.T) { { Config: testAccKubernetesTerminationMessagePolicyDefault(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.termination_message_policy", "File"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.termination_message_policy", "File"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -789,6 +951,7 @@ func TestAccKubernetesPod_termination_message_policy_override_as_file(t *testing podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -800,10 +963,16 @@ func TestAccKubernetesPod_termination_message_policy_override_as_file(t *testing { Config: testAccKubernetesTerminationMessagePolicyWithFile(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.termination_message_policy", "File"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.termination_message_policy", "File"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -813,6 +982,7 @@ func TestAccKubernetesPod_termination_message_policy_override_as_fallback_to_log podName := fmt.Sprintf("tf-acc-test-%s", acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -824,10 +994,16 @@ func TestAccKubernetesPod_termination_message_policy_override_as_fallback_to_log { Config: testAccKubernetesTerminationMessagePolicyWithFallBackToLogsOnErr(podName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &confPod), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.termination_message_policy", "FallbackToLogsOnError"), + testAccCheckKubernetesPodExists(resourceName, &confPod), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.termination_message_policy", "FallbackToLogsOnError"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -837,6 +1013,7 @@ func TestAccKubernetesPod_enableServiceLinks(t *testing.T) { rName := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -846,17 +1023,23 @@ func TestAccKubernetesPod_enableServiceLinks(t *testing.T) { { Config: testAccKubernetesPodConfigEnableServiceLinks(rName, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.annotations.%", "0"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.labels.%", "1"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.labels.app", "pod_label"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", rName), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.generation"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.resource_version"), - resource.TestCheckResourceAttrSet("kubernetes_pod.test", "metadata.0.uid"), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.enable_service_links", "false"), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.annotations.%", "0"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.labels.%", "1"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.labels.app", "pod_label"), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", rName), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.generation"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.resource_version"), + resource.TestCheckResourceAttrSet(resourceName, "metadata.0.uid"), + resource.TestCheckResourceAttr(resourceName, "spec.0.enable_service_links", "false"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -881,6 +1064,7 @@ func TestAccKubernetesPod_bug1085(t *testing.T) { name := acctest.RandomWithPrefix("tf-acc-test") imageName := alpineImageVersion var conf api.Pod + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); skipIfNotRunningInMinikube(t) }, @@ -890,15 +1074,21 @@ func TestAccKubernetesPod_bug1085(t *testing.T) { { Config: testAccKubernetesPodConfigWithVolume(name, imageName, ""), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.service_account_name", "default"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.service_account_name", "default"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: testAccKubernetesPodConfigWithVolume(name, imageName, `service_account_name="test"`), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.service_account_name", "test"), + testAccCheckKubernetesPodExists(resourceName, &conf), + resource.TestCheckResourceAttr(resourceName, "spec.0.service_account_name", "test"), ), }, }, @@ -912,6 +1102,7 @@ func TestAccKubernetesPod_readinessGate(t *testing.T) { secretName := acctest.RandomWithPrefix("tf-acc-test") configMapName := acctest.RandomWithPrefix("tf-acc-test") imageName1 := nginxImageVersion1 + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -921,7 +1112,7 @@ func TestAccKubernetesPod_readinessGate(t *testing.T) { { Config: testAccKubernetesPodConfigBasic(secretName, configMapName, podName, imageName1), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), + testAccCheckKubernetesPodExists(resourceName, &conf1), ), }, { @@ -946,10 +1137,16 @@ func TestAccKubernetesPod_readinessGate(t *testing.T) { } }, Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.readiness_gate.0.condition_type", "haha"), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "spec.0.readiness_gate.0.condition_type", "haha"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -1004,6 +1201,12 @@ func TestAccKubernetesPod_filterAnnotations(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "metadata.0.labels.kubernetes.io/ingress.class", "gce-multi-cluster"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, }, }) } @@ -1042,6 +1245,7 @@ func TestAccKubernetesPod_regression(t *testing.T) { name := acctest.RandomWithPrefix("tf-acc-test") imageName := nginxImageVersion + resourceName := "kubernetes_pod.test" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -1051,17 +1255,23 @@ func TestAccKubernetesPod_regression(t *testing.T) { { Config: requiredProviders() + testAccKubernetesPodConfig_beforeUpdate(name, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf1), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", name), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), + testAccCheckKubernetesPodExists(resourceName, &conf1), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version"}, + }, { Config: requiredProviders() + testAccKubernetesPodConfig_afterUpdate(name, imageName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckKubernetesPodExists("kubernetes_pod.test", &conf2), - resource.TestCheckResourceAttr("kubernetes_pod.test", "metadata.0.name", name), - resource.TestCheckResourceAttr("kubernetes_pod.test", "spec.0.container.0.image", imageName), + testAccCheckKubernetesPodExists(resourceName, &conf2), + resource.TestCheckResourceAttr(resourceName, "metadata.0.name", name), + resource.TestCheckResourceAttr(resourceName, "spec.0.container.0.image", imageName), testAccCheckKubernetesPodForceNew(&conf1, &conf2, false), ), }, diff --git a/kubernetes/schema_container.go b/kubernetes/schema_container.go index c6f3a8f1e5..f5aec7e404 100644 --- a/kubernetes/schema_container.go +++ b/kubernetes/schema_container.go @@ -1,6 +1,8 @@ package kubernetes import ( + api "k8s.io/api/core/v1" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) @@ -43,8 +45,12 @@ func handlerFields() map[string]*schema.Schema { "scheme": { Type: schema.TypeString, Optional: true, - Default: "HTTP", + Default: string(api.URISchemeHTTP), Description: `Scheme to use for connecting to the host.`, + ValidateFunc: validation.StringInSlice([]string{ + string(api.URISchemeHTTP), + string(api.URISchemeHTTPS), + }, false), }, "port": { Type: schema.TypeString, @@ -506,10 +512,11 @@ func containerFields(isUpdatable bool) map[string]*schema.Schema { Description: "What host IP to bind the external port to.", }, "host_port": { - Type: schema.TypeInt, - Optional: true, - ForceNew: !isUpdatable, - Description: "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", + Type: schema.TypeInt, + Optional: true, + ForceNew: !isUpdatable, + Description: "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", + ValidateFunc: validation.IsPortNumber, }, "name": { Type: schema.TypeString, @@ -523,7 +530,11 @@ func containerFields(isUpdatable bool) map[string]*schema.Schema { Optional: true, ForceNew: !isUpdatable, Description: `Protocol for port. Must be UDP or TCP. Defaults to "TCP".`, - Default: "TCP", + Default: string(api.ProtocolTCP), + ValidateFunc: validation.StringInSlice([]string{ + string(api.ProtocolTCP), + string(api.ProtocolUDP), + }, false), }, }, }, @@ -585,12 +596,15 @@ func containerFields(isUpdatable bool) map[string]*schema.Schema { Description: "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated.", }, "termination_message_policy": { - Type: schema.TypeString, - Optional: true, - ForceNew: !isUpdatable, - ValidateFunc: validation.StringInSlice([]string{"File", "FallbackToLogsOnError"}, false), - Computed: true, - Description: "Optional: Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", + Type: schema.TypeString, + Optional: true, + ForceNew: !isUpdatable, + ValidateFunc: validation.StringInSlice([]string{ + string(api.TerminationMessageReadFile), + string(api.TerminationMessageFallbackToLogsOnError), + }, false), + Computed: true, + Description: "Optional: Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", }, "tty": { Type: schema.TypeBool, diff --git a/kubernetes/schema_pod_spec.go b/kubernetes/schema_pod_spec.go index e1b474090a..806daa1117 100644 --- a/kubernetes/schema_pod_spec.go +++ b/kubernetes/schema_pod_spec.go @@ -1,6 +1,8 @@ package kubernetes import ( + api "k8s.io/api/core/v1" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) @@ -71,8 +73,14 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { Optional: true, Computed: isComputed, ForceNew: !isUpdatable, - Default: conditionalDefault(!isComputed, "ClusterFirst"), + Default: conditionalDefault(!isComputed, string(api.DNSClusterFirst)), Description: "Set DNS policy for containers within the pod. Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. Optional: Defaults to 'ClusterFirst', see [Kubernetes reference](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy).", + ValidateFunc: validation.StringInSlice([]string{ + string(api.DNSClusterFirst), + string(api.DNSClusterFirstWithHostNet), + string(api.DNSDefault), + string(api.DNSNone), + }, false), }, "dns_config": { Type: schema.TypeList, @@ -148,10 +156,11 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { Elem: &schema.Schema{Type: schema.TypeString}, }, "ip": { - Type: schema.TypeString, - Required: true, - ForceNew: !isUpdatable, - Description: "IP address of the host file entry.", + Type: schema.TypeString, + Required: true, + ForceNew: !isUpdatable, + Description: "IP address of the host file entry.", + ValidateFunc: validation.IsIPAddress, }, }, }, @@ -231,8 +240,13 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { Optional: true, Computed: isComputed, ForceNew: !isUpdatable, - Default: conditionalDefault(!isComputed, "Always"), + Default: conditionalDefault(!isComputed, string(api.RestartPolicyAlways)), Description: "Restart policy for all containers within the pod. One of Always, OnFailure, Never. More info: http://kubernetes.io/docs/user-guide/pod-states#restartpolicy.", + ValidateFunc: validation.StringInSlice([]string{ + string(api.RestartPolicyAlways), + string(api.RestartPolicyOnFailure), + string(api.RestartPolicyNever), + }, false), }, "security_context": { Type: schema.TypeList, @@ -348,11 +362,15 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "effect": { - Type: schema.TypeString, - Description: "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - Optional: true, - ForceNew: !isUpdatable, - ValidateFunc: validation.StringInSlice([]string{"NoSchedule", "PreferNoSchedule", "NoExecute"}, false), + Type: schema.TypeString, + Description: "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + Optional: true, + ForceNew: !isUpdatable, + ValidateFunc: validation.StringInSlice([]string{ + string(api.TaintEffectNoSchedule), + string(api.TaintEffectPreferNoSchedule), + string(api.TaintEffectNoExecute), + }, false), }, "key": { Type: schema.TypeString, @@ -361,12 +379,15 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { ForceNew: !isUpdatable, }, "operator": { - Type: schema.TypeString, - Description: "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - Default: "Equal", - Optional: true, - ForceNew: !isUpdatable, - ValidateFunc: validation.StringInSlice([]string{"Exists", "Equal"}, false), + Type: schema.TypeString, + Description: "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + Default: string(api.TolerationOpEqual), + Optional: true, + ForceNew: !isUpdatable, + ValidateFunc: validation.StringInSlice([]string{ + string(api.TolerationOpExists), + string(api.TolerationOpEqual), + }, false), }, "toleration_seconds": { // Use TypeString to allow an "unspecified" value, @@ -404,11 +425,14 @@ func podSpecFields(isUpdatable, isComputed bool) map[string]*schema.Schema { Optional: true, }, "when_unsatisfiable": { - Type: schema.TypeString, - Description: "indicates how to deal with a pod if it doesn't satisfy the spread constraint.", - Default: "DoNotSchedule", - Optional: true, - ValidateFunc: validation.StringInSlice([]string{"DoNotSchedule", "ScheduleAnyway"}, false), + Type: schema.TypeString, + Description: "indicates how to deal with a pod if it doesn't satisfy the spread constraint.", + Default: string(api.DoNotSchedule), + Optional: true, + ValidateFunc: validation.StringInSlice([]string{ + string(api.DoNotSchedule), + string(api.ScheduleAnyway), + }, false), }, "label_selector": { Type: schema.TypeList, diff --git a/kubernetes/structures.go b/kubernetes/structures.go index 068d5fc3cb..e73b93f948 100644 --- a/kubernetes/structures.go +++ b/kubernetes/structures.go @@ -63,7 +63,6 @@ var builtInLabels = map[string]string{ //Networking networking.AnnotationIsDefaultIngressClass: "", - networking.AnnotationIngressClass: "", //Discovery discovery.LabelServiceName: "",