Skip to content

Commit cfedd4f

Browse files
authored
r/persistent_volume - add support for CSI (#817)
1 parent ffd54a6 commit cfedd4f

File tree

4 files changed

+461
-48
lines changed

4 files changed

+461
-48
lines changed

kubernetes/resource_kubernetes_persistent_volume_test.go

Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
588732
func 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+
8831165
func testAccKubernetesPersistentVolumeConfig_hostPath_volumeSource(name, path, typ string) string {
8841166
return fmt.Sprintf(`
8851167
resource "kubernetes_persistent_volume" "test" {

0 commit comments

Comments
 (0)