@@ -585,6 +585,150 @@ func TestAccKubernetesPersistentVolume_hostPath_mountOptions(t *testing.T) {
585585 })
586586}
587587
588+ func TestAccKubernetesPersistentVolume_csi_basic (t * testing.T ) {
589+ var conf api.PersistentVolume
590+ name := acctest .RandomWithPrefix ("tf-acc-test" )
591+ resourceName := "kubernetes_persistent_volume.test"
592+
593+ resource .Test (t , resource.TestCase {
594+ PreCheck : func () { testAccPreCheck (t ) },
595+ IDRefreshName : "kubernetes_persistent_volume.test" ,
596+ Providers : testAccProviders ,
597+ CheckDestroy : testAccCheckKubernetesPersistentVolumeDestroy ,
598+ Steps : []resource.TestStep {
599+ {
600+ Config : testAccKubernetesPersistentVolumeConfig_csi_basic (name ),
601+ Check : resource .ComposeAggregateTestCheckFunc (
602+ testAccCheckKubernetesPersistentVolumeExists (resourceName , & conf ),
603+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.%" , "2" ),
604+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationOne" , "one" ),
605+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationTwo" , "two" ),
606+ testAccCheckMetaAnnotations (& conf .ObjectMeta , map [string ]string {"TestAnnotationOne" : "one" , "TestAnnotationTwo" : "two" }),
607+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.%" , "3" ),
608+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelOne" , "one" ),
609+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelTwo" , "two" ),
610+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelThree" , "three" ),
611+ resource .TestCheckResourceAttr (resourceName , "metadata.0.name" , name ),
612+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.generation" ),
613+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.resource_version" ),
614+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.self_link" ),
615+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.uid" ),
616+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.%" , "1" ),
617+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.storage" , "5Gi" ),
618+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.#" , "1" ),
619+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.1245328686" , "ReadWriteOnce" ),
620+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.#" , "1" ),
621+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.driver" , name ),
622+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.volume_handle" , name ),
623+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.read_only" , "false" ),
624+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.fs_type" , "" ),
625+ ),
626+ },
627+ {
628+ Config : testAccKubernetesPersistentVolumeConfig_csi_modified (name ),
629+ Check : resource .ComposeAggregateTestCheckFunc (
630+ testAccCheckKubernetesPersistentVolumeExists (resourceName , & conf ),
631+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.%" , "2" ),
632+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationOne" , "one" ),
633+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationTwo" , "two" ),
634+ testAccCheckMetaAnnotations (& conf .ObjectMeta , map [string ]string {"TestAnnotationOne" : "one" , "TestAnnotationTwo" : "two" }),
635+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.%" , "3" ),
636+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelOne" , "one" ),
637+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelTwo" , "two" ),
638+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelThree" , "three" ),
639+ resource .TestCheckResourceAttr (resourceName , "metadata.0.name" , name ),
640+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.generation" ),
641+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.resource_version" ),
642+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.self_link" ),
643+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.uid" ),
644+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.%" , "1" ),
645+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.storage" , "10Gi" ),
646+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.#" , "1" ),
647+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.1245328686" , "ReadWriteOnce" ),
648+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.#" , "1" ),
649+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.driver" , name ),
650+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.volume_handle" , name ),
651+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.read_only" , "true" ),
652+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.fs_type" , "ext4" ),
653+ ),
654+ },
655+ },
656+ })
657+ }
658+
659+ func TestAccKubernetesPersistentVolume_csi_importBasic (t * testing.T ) {
660+ name := acctest .RandomWithPrefix ("tf-acc-test" )
661+ resourceName := "kubernetes_persistent_volume.test"
662+
663+ resource .Test (t , resource.TestCase {
664+ PreCheck : func () { testAccPreCheck (t ) },
665+ IDRefreshName : "kubernetes_persistent_volume.test" ,
666+ Providers : testAccProviders ,
667+ CheckDestroy : testAccCheckKubernetesPersistentVolumeDestroy ,
668+ Steps : []resource.TestStep {
669+ {
670+ Config : testAccKubernetesPersistentVolumeConfig_csi_basic (name ),
671+ },
672+ {
673+ ResourceName : resourceName ,
674+ ImportState : true ,
675+ ImportStateVerify : true ,
676+ },
677+ },
678+ })
679+ }
680+
681+ func TestAccKubernetesPersistentVolume_csi_secrets (t * testing.T ) {
682+ var conf api.PersistentVolume
683+ name := acctest .RandomWithPrefix ("tf-acc-test" )
684+ resourceName := "kubernetes_persistent_volume.test"
685+
686+ resource .Test (t , resource.TestCase {
687+ PreCheck : func () { testAccPreCheck (t ) },
688+ IDRefreshName : "kubernetes_persistent_volume.test" ,
689+ Providers : testAccProviders ,
690+ CheckDestroy : testAccCheckKubernetesPersistentVolumeDestroy ,
691+ Steps : []resource.TestStep {
692+ {
693+ Config : testAccKubernetesPersistentVolumeConfig_csi_secrets (name ),
694+ Check : resource .ComposeAggregateTestCheckFunc (
695+ testAccCheckKubernetesPersistentVolumeExists (resourceName , & conf ),
696+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.%" , "2" ),
697+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationOne" , "one" ),
698+ resource .TestCheckResourceAttr (resourceName , "metadata.0.annotations.TestAnnotationTwo" , "two" ),
699+ testAccCheckMetaAnnotations (& conf .ObjectMeta , map [string ]string {"TestAnnotationOne" : "one" , "TestAnnotationTwo" : "two" }),
700+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.%" , "3" ),
701+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelOne" , "one" ),
702+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelTwo" , "two" ),
703+ resource .TestCheckResourceAttr (resourceName , "metadata.0.labels.TestLabelThree" , "three" ),
704+ resource .TestCheckResourceAttr (resourceName , "metadata.0.name" , name ),
705+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.generation" ),
706+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.resource_version" ),
707+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.self_link" ),
708+ resource .TestCheckResourceAttrSet (resourceName , "metadata.0.uid" ),
709+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.%" , "1" ),
710+ resource .TestCheckResourceAttr (resourceName , "spec.0.capacity.storage" , "5Gi" ),
711+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.#" , "1" ),
712+ resource .TestCheckResourceAttr (resourceName , "spec.0.access_modes.1245328686" , "ReadWriteOnce" ),
713+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.#" , "1" ),
714+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.driver" , name ),
715+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.volume_handle" , name ),
716+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.read_only" , "false" ),
717+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.fs_type" , "" ),
718+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.controller_publish_secret_ref.0.name" , name ),
719+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.controller_publish_secret_ref.0.namespace" , "default" ),
720+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.node_stage_secret_ref.0.name" , name ),
721+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.node_stage_secret_ref.0.namespace" , "default" ),
722+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.node_publish_secret_ref.0.name" , name ),
723+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.node_publish_secret_ref.0.namespace" , "default" ),
724+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.controller_expand_secret_ref.0.name" , name ),
725+ resource .TestCheckResourceAttr (resourceName , "spec.0.persistent_volume_source.0.csi.0.controller_expand_secret_ref.0.namespace" , "default" ),
726+ ),
727+ },
728+ },
729+ })
730+ }
731+
588732func waitForPersistenceVolumeDeleted (pvName string , poll , timeout time.Duration ) error {
589733 conn , err := testAccProvider .Meta ().(KubeClientsets ).MainClientset ()
590734 if err != nil {
@@ -880,6 +1024,144 @@ resource "aws_ebs_volume" "test" {
8801024` , name , zone , diskName )
8811025}
8821026
1027+ func testAccKubernetesPersistentVolumeConfig_csi_basic (name string ) string {
1028+ return fmt .Sprintf (`
1029+ resource "kubernetes_persistent_volume" "test" {
1030+ metadata {
1031+ annotations = {
1032+ TestAnnotationOne = "one"
1033+ TestAnnotationTwo = "two"
1034+ }
1035+
1036+ labels = {
1037+ TestLabelOne = "one"
1038+ TestLabelTwo = "two"
1039+ TestLabelThree = "three"
1040+ }
1041+
1042+ name = %[1]q
1043+ }
1044+
1045+ spec {
1046+ capacity = {
1047+ storage = "5Gi"
1048+ }
1049+
1050+ access_modes = ["ReadWriteOnce"]
1051+
1052+ persistent_volume_source {
1053+ csi {
1054+ driver = %[1]q
1055+ volume_handle = %[1]q
1056+
1057+ volume_attributes = {
1058+ "foo" = "bar"
1059+ }
1060+ }
1061+ }
1062+ }
1063+ }
1064+ ` , name )
1065+ }
1066+
1067+ func testAccKubernetesPersistentVolumeConfig_csi_modified (name string ) string {
1068+ return fmt .Sprintf (`
1069+ resource "kubernetes_persistent_volume" "test" {
1070+ metadata {
1071+ annotations = {
1072+ TestAnnotationOne = "one"
1073+ TestAnnotationTwo = "two"
1074+ }
1075+
1076+ labels = {
1077+ TestLabelOne = "one"
1078+ TestLabelTwo = "two"
1079+ TestLabelThree = "three"
1080+ }
1081+
1082+ name = %[1]q
1083+ }
1084+
1085+ spec {
1086+ capacity = {
1087+ storage = "10Gi"
1088+ }
1089+
1090+ access_modes = ["ReadWriteOnce"]
1091+
1092+ persistent_volume_source {
1093+ csi {
1094+ driver = %[1]q
1095+ volume_handle = %[1]q
1096+ read_only = true
1097+ fs_type = "ext4"
1098+
1099+ volume_attributes = {
1100+ "bar" = "foo"
1101+ }
1102+ }
1103+ }
1104+ }
1105+ }
1106+ ` , name )
1107+ }
1108+
1109+ func testAccKubernetesPersistentVolumeConfig_csi_secrets (name string ) string {
1110+ return fmt .Sprintf (`
1111+ resource "kubernetes_persistent_volume" "test" {
1112+ metadata {
1113+ annotations = {
1114+ TestAnnotationOne = "one"
1115+ TestAnnotationTwo = "two"
1116+ }
1117+
1118+ labels = {
1119+ TestLabelOne = "one"
1120+ TestLabelTwo = "two"
1121+ TestLabelThree = "three"
1122+ }
1123+
1124+ name = %[1]q
1125+ }
1126+
1127+ spec {
1128+ capacity = {
1129+ storage = "5Gi"
1130+ }
1131+
1132+ access_modes = ["ReadWriteOnce"]
1133+
1134+ persistent_volume_source {
1135+ csi {
1136+ driver = %[1]q
1137+ volume_handle = %[1]q
1138+
1139+ volume_attributes = {
1140+ "foo" = "bar"
1141+ }
1142+ controller_publish_secret_ref {
1143+ name = %[1]q
1144+ namespace = "default"
1145+ }
1146+ node_stage_secret_ref {
1147+ name = %[1]q
1148+ namespace = "default"
1149+ }
1150+ node_publish_secret_ref {
1151+ name = %[1]q
1152+ namespace = "default"
1153+ }
1154+ controller_expand_secret_ref {
1155+ name = %[1]q
1156+ namespace = "default"
1157+ }
1158+ }
1159+ }
1160+ }
1161+ }
1162+ ` , name )
1163+ }
1164+
8831165func testAccKubernetesPersistentVolumeConfig_hostPath_volumeSource (name , path , typ string ) string {
8841166 return fmt .Sprintf (`
8851167resource "kubernetes_persistent_volume" "test" {
0 commit comments