@@ -547,6 +547,53 @@ func TestAccKubernetesPod_with_cfg_map_volume_mount(t *testing.T) {
547547 })
548548}
549549
550+ func TestAccKubernetesPod_with_projected_volume (t * testing.T ) {
551+ var conf api.Pod
552+
553+ cfgMapName := fmt .Sprintf ("tf-acc-test-%s" , acctest .RandStringFromCharSet (10 , acctest .CharSetAlphaNum ))
554+ cfgMap2Name := fmt .Sprintf ("tf-acc-test-%s" , acctest .RandStringFromCharSet (10 , acctest .CharSetAlphaNum ))
555+ secretName := fmt .Sprintf ("tf-acc-test-%s" , acctest .RandStringFromCharSet (10 , acctest .CharSetAlphaNum ))
556+ podName := fmt .Sprintf ("tf-acc-test-%s" , acctest .RandStringFromCharSet (10 , acctest .CharSetAlphaNum ))
557+ imageName := "busybox:1.32"
558+
559+ resource .Test (t , resource.TestCase {
560+ PreCheck : func () { testAccPreCheck (t ) },
561+ Providers : testAccProviders ,
562+ CheckDestroy : testAccCheckKubernetesPodDestroy ,
563+ Steps : []resource.TestStep {
564+ {
565+ ExpectNonEmptyPlan : true ,
566+ Config : testAccKubernetesPodProjectedVolume (cfgMapName , cfgMap2Name , secretName , podName , imageName ),
567+ Check : resource .ComposeAggregateTestCheckFunc (
568+ testAccCheckKubernetesPodExists ("kubernetes_pod.test" , & conf ),
569+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.container.0.image" , imageName ),
570+
571+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.#" , "1" ),
572+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.name" , "projected-vol" ),
573+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.#" , "1" ),
574+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.default_mode" , "0777" ),
575+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.#" , "4" ),
576+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.0.config_map.#" , "1" ),
577+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.0.config_map.0.name" , cfgMapName ),
578+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.1.config_map.#" , "1" ),
579+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.1.config_map.0.name" , cfgMap2Name ),
580+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.2.secret.#" , "1" ),
581+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.2.secret.0.name" , secretName ),
582+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.#" , "1" ),
583+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.#" , "2" ),
584+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.path" , "labels" ),
585+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.0.field_ref.#" , "1" ),
586+ 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" ),
587+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.path" , "cpu_limit" ),
588+ resource .TestCheckResourceAttr ("kubernetes_pod.test" , "spec.0.volume.0.projected.0.sources.3.downward_api.0.items.1.resource_field_ref.#" , "1" ),
589+ 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" ),
590+ 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" ),
591+ ),
592+ },
593+ },
594+ })
595+ }
596+
550597func TestAccKubernetesPod_with_resource_requirements (t * testing.T ) {
551598 var conf api.Pod
552599
@@ -1511,6 +1558,133 @@ resource "kubernetes_pod" "test" {
15111558` , secretName , podName , imageName )
15121559}
15131560
1561+ func testAccKubernetesPodProjectedVolume (cfgMapName , cfgMap2Name , secretName , podName , imageName string ) string {
1562+ return fmt .Sprintf (`
1563+ resource "kubernetes_config_map" "test" {
1564+ metadata {
1565+ name = "%s"
1566+ }
1567+
1568+ binary_data = {
1569+ raw = "${base64encode("Raw data should come back as is in the pod")}"
1570+ }
1571+
1572+ data = {
1573+ one = "first"
1574+ }
1575+ }
1576+
1577+ resource "kubernetes_config_map" "test2" {
1578+ metadata {
1579+ name = "%s"
1580+ }
1581+
1582+ binary_data = {
1583+ raw = "${base64encode("Raw data should come back as is in the pod")}"
1584+ }
1585+
1586+ data = {
1587+ one = "first"
1588+ }
1589+ }
1590+
1591+ resource "kubernetes_secret" "test" {
1592+ metadata {
1593+ name = "%s"
1594+ }
1595+
1596+ data = {
1597+ one = "first"
1598+ }
1599+ }
1600+
1601+ resource "kubernetes_pod" "test" {
1602+ metadata {
1603+ labels = {
1604+ app = "pod_label"
1605+ }
1606+
1607+ name = "%s"
1608+ }
1609+
1610+ spec {
1611+ restart_policy = "Never"
1612+
1613+ container {
1614+ image = "%s"
1615+ name = "containername"
1616+
1617+ command = ["sleep", "3600"]
1618+
1619+ lifecycle {
1620+ post_start {
1621+ exec {
1622+ command = ["/bin/sh", "-xc", "grep 'Raw data should come back as is in the pod' /tmp/my-projected-volume/raw.txt"]
1623+ }
1624+ }
1625+ }
1626+
1627+ volume_mount {
1628+ mount_path = "/tmp/my-projected-volume"
1629+ name = "projected-vol"
1630+ }
1631+ }
1632+
1633+ volume {
1634+ name = "projected-vol"
1635+ projected {
1636+ default_mode = "0777"
1637+ sources {
1638+ config_map {
1639+ name = "${kubernetes_config_map.test.metadata.0.name}"
1640+ items {
1641+ key = "raw"
1642+ path = "raw.txt"
1643+ }
1644+ }
1645+ }
1646+ sources {
1647+ config_map {
1648+ name = "${kubernetes_config_map.test2.metadata.0.name}"
1649+ items {
1650+ key = "raw"
1651+ path = "raw-again.txt"
1652+ }
1653+ }
1654+ }
1655+ sources {
1656+ secret {
1657+ name = "${kubernetes_secret.test.metadata.0.name}"
1658+ items {
1659+ key = "one"
1660+ path = "secret.txt"
1661+ }
1662+ }
1663+ }
1664+ sources {
1665+ downward_api {
1666+ items {
1667+ path = "labels"
1668+ field_ref {
1669+ field_path = "metadata.labels"
1670+ }
1671+ }
1672+ items {
1673+ path = "cpu_limit"
1674+ resource_field_ref {
1675+ container_name = "containername"
1676+ resource = "limits.cpu"
1677+ }
1678+ }
1679+ }
1680+ }
1681+ }
1682+ }
1683+ }
1684+ }
1685+ ` , cfgMapName , cfgMap2Name , secretName , podName , imageName )
1686+ }
1687+
15141688func testAccKubernetesPodConfigWithResourceRequirements (podName , imageName string ) string {
15151689 return fmt .Sprintf (`
15161690resource "kubernetes_pod" "test" {
0 commit comments