github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_test.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/terraform/helper/acctest"
     9  	"github.com/hashicorp/terraform/helper/resource"
    10  	"github.com/hashicorp/terraform/terraform"
    11  	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  	api "k8s.io/kubernetes/pkg/api/v1"
    13  	kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
    14  )
    15  
    16  func TestAccKubernetesPersistentVolume_basic(t *testing.T) {
    17  	var conf api.PersistentVolume
    18  	randString := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
    19  	name := fmt.Sprintf("tf-acc-test-%s", randString)
    20  	diskName := fmt.Sprintf("tf-acc-test-disk-%s", randString)
    21  
    22  	region := os.Getenv("GOOGLE_REGION")
    23  	zone := os.Getenv("GOOGLE_ZONE")
    24  
    25  	resource.Test(t, resource.TestCase{
    26  		PreCheck:      func() { testAccPreCheck(t) },
    27  		IDRefreshName: "kubernetes_persistent_volume.test",
    28  		Providers:     testAccProviders,
    29  		CheckDestroy:  testAccCheckKubernetesPersistentVolumeDestroy,
    30  		Steps: []resource.TestStep{
    31  			{
    32  				Config: testAccKubernetesPersistentVolumeConfig_basic(name, diskName, zone),
    33  				Check: resource.ComposeAggregateTestCheckFunc(
    34  					testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &conf),
    35  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.%", "2"),
    36  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    37  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.TestAnnotationTwo", "two"),
    38  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}),
    39  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.%", "3"),
    40  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelOne", "one"),
    41  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelTwo", "two"),
    42  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelThree", "three"),
    43  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{
    44  						"TestLabelOne":                             "one",
    45  						"TestLabelTwo":                             "two",
    46  						"TestLabelThree":                           "three",
    47  						"failure-domain.beta.kubernetes.io/region": region,
    48  						"failure-domain.beta.kubernetes.io/zone":   zone,
    49  					}),
    50  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.name", name),
    51  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.generation"),
    52  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.resource_version"),
    53  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.self_link"),
    54  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.uid"),
    55  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.%", "1"),
    56  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.storage", "123Gi"),
    57  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.#", "1"),
    58  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1254135962", "ReadWriteMany"),
    59  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.#", "1"),
    60  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.0.pd_name", diskName),
    61  				),
    62  			},
    63  			{
    64  				Config: testAccKubernetesPersistentVolumeConfig_modified(name, diskName, zone),
    65  				Check: resource.ComposeAggregateTestCheckFunc(
    66  					testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &conf),
    67  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.%", "2"),
    68  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.TestAnnotationOne", "one"),
    69  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.TestAnnotationTwo", "two"),
    70  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{"TestAnnotationOne": "one", "TestAnnotationTwo": "two"}),
    71  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.%", "3"),
    72  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelOne", "one"),
    73  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelTwo", "two"),
    74  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.TestLabelThree", "three"),
    75  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{
    76  						"TestLabelOne":                             "one",
    77  						"TestLabelTwo":                             "two",
    78  						"TestLabelThree":                           "three",
    79  						"failure-domain.beta.kubernetes.io/region": region,
    80  						"failure-domain.beta.kubernetes.io/zone":   zone,
    81  					}),
    82  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.name", name),
    83  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.generation"),
    84  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.resource_version"),
    85  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.self_link"),
    86  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.uid"),
    87  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.%", "1"),
    88  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.storage", "42Mi"),
    89  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.#", "2"),
    90  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1245328686", "ReadWriteOnce"),
    91  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1254135962", "ReadWriteMany"),
    92  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.#", "1"),
    93  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.0.fs_type", "ntfs"),
    94  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.0.pd_name", diskName),
    95  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.0.read_only", "true"),
    96  				),
    97  			},
    98  		},
    99  	})
   100  }
   101  
   102  func TestAccKubernetesPersistentVolume_importBasic(t *testing.T) {
   103  	resourceName := "kubernetes_persistent_volume.test"
   104  	randString := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
   105  	name := fmt.Sprintf("tf-acc-test-import-%s", randString)
   106  	diskName := fmt.Sprintf("tf-acc-test-disk-%s", randString)
   107  
   108  	zone := os.Getenv("GOOGLE_ZONE")
   109  
   110  	resource.Test(t, resource.TestCase{
   111  		PreCheck:     func() { testAccPreCheck(t) },
   112  		Providers:    testAccProviders,
   113  		CheckDestroy: testAccCheckKubernetesPersistentVolumeDestroy,
   114  		Steps: []resource.TestStep{
   115  			{
   116  				Config: testAccKubernetesPersistentVolumeConfig_basic(name, diskName, zone),
   117  			},
   118  			{
   119  				ResourceName:      resourceName,
   120  				ImportState:       true,
   121  				ImportStateVerify: true,
   122  			},
   123  		},
   124  	})
   125  }
   126  
   127  func TestAccKubernetesPersistentVolume_volumeSource(t *testing.T) {
   128  	var conf api.PersistentVolume
   129  	randString := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
   130  	name := fmt.Sprintf("tf-acc-test-%s", randString)
   131  	diskName := fmt.Sprintf("tf-acc-test-disk-%s", randString)
   132  
   133  	region := os.Getenv("GOOGLE_REGION")
   134  	zone := os.Getenv("GOOGLE_ZONE")
   135  
   136  	resource.Test(t, resource.TestCase{
   137  		PreCheck:      func() { testAccPreCheck(t) },
   138  		IDRefreshName: "kubernetes_persistent_volume.test",
   139  		Providers:     testAccProviders,
   140  		CheckDestroy:  testAccCheckKubernetesPersistentVolumeDestroy,
   141  		Steps: []resource.TestStep{
   142  			{
   143  				Config: testAccKubernetesPersistentVolumeConfig_volumeSource(name, diskName, zone),
   144  				Check: resource.ComposeAggregateTestCheckFunc(
   145  					testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &conf),
   146  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.%", "0"),
   147  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   148  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.%", "0"),
   149  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{
   150  						"failure-domain.beta.kubernetes.io/region": region,
   151  						"failure-domain.beta.kubernetes.io/zone":   zone,
   152  					}),
   153  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.name", name),
   154  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.generation"),
   155  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.resource_version"),
   156  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.self_link"),
   157  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.uid"),
   158  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.%", "1"),
   159  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.storage", "123Gi"),
   160  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.#", "1"),
   161  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1254135962", "ReadWriteMany"),
   162  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.#", "1"),
   163  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.gce_persistent_disk.0.pd_name"),
   164  				),
   165  			},
   166  			{
   167  				Config: testAccKubernetesPersistentVolumeConfig_volumeSource_modified(name),
   168  				Check: resource.ComposeAggregateTestCheckFunc(
   169  					testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &conf),
   170  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.%", "0"),
   171  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   172  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.%", "0"),
   173  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{
   174  						"failure-domain.beta.kubernetes.io/region": region,
   175  						"failure-domain.beta.kubernetes.io/zone":   zone,
   176  					}),
   177  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.name", name),
   178  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.generation"),
   179  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.resource_version"),
   180  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.self_link"),
   181  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.uid"),
   182  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.%", "1"),
   183  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.storage", "123Gi"),
   184  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.#", "1"),
   185  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1254135962", "ReadWriteMany"),
   186  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.host_path.#", "1"),
   187  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.host_path.0.path", "/custom/testing/path"),
   188  				),
   189  			},
   190  		},
   191  	})
   192  }
   193  
   194  func TestAccKubernetesPersistentVolume_cephFsSecretRef(t *testing.T) {
   195  	var conf api.PersistentVolume
   196  	randString := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
   197  	name := fmt.Sprintf("tf-acc-test-%s", randString)
   198  
   199  	resource.Test(t, resource.TestCase{
   200  		PreCheck:      func() { testAccPreCheck(t) },
   201  		IDRefreshName: "kubernetes_persistent_volume.test",
   202  		Providers:     testAccProviders,
   203  		CheckDestroy:  testAccCheckKubernetesPersistentVolumeDestroy,
   204  		Steps: []resource.TestStep{
   205  			{
   206  				Config: testAccKubernetesPersistentVolumeConfig_cephFsSecretRef(name),
   207  				Check: resource.ComposeAggregateTestCheckFunc(
   208  					testAccCheckKubernetesPersistentVolumeExists("kubernetes_persistent_volume.test", &conf),
   209  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.annotations.%", "0"),
   210  					testAccCheckMetaAnnotations(&conf.ObjectMeta, map[string]string{}),
   211  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.labels.%", "0"),
   212  					testAccCheckMetaLabels(&conf.ObjectMeta, map[string]string{}),
   213  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "metadata.0.name", name),
   214  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.generation"),
   215  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.resource_version"),
   216  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.self_link"),
   217  					resource.TestCheckResourceAttrSet("kubernetes_persistent_volume.test", "metadata.0.uid"),
   218  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.%", "1"),
   219  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.capacity.storage", "2Gi"),
   220  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.#", "1"),
   221  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.access_modes.1254135962", "ReadWriteMany"),
   222  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.#", "1"),
   223  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.0.monitors.#", "2"),
   224  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.0.monitors.2848821021", "10.16.154.78:6789"),
   225  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.0.monitors.4263435410", "10.16.154.82:6789"),
   226  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.0.secret_ref.#", "1"),
   227  					resource.TestCheckResourceAttr("kubernetes_persistent_volume.test", "spec.0.persistent_volume_source.0.ceph_fs.0.secret_ref.0.name", "ceph-secret"),
   228  				),
   229  			},
   230  		},
   231  	})
   232  }
   233  
   234  func testAccCheckKubernetesPersistentVolumeDestroy(s *terraform.State) error {
   235  	conn := testAccProvider.Meta().(*kubernetes.Clientset)
   236  
   237  	for _, rs := range s.RootModule().Resources {
   238  		if rs.Type != "kubernetes_persistent_volume" {
   239  			continue
   240  		}
   241  		name := rs.Primary.ID
   242  		resp, err := conn.CoreV1().PersistentVolumes().Get(name, meta_v1.GetOptions{})
   243  		if err == nil {
   244  			if resp.Name == rs.Primary.ID {
   245  				return fmt.Errorf("Persistent Volume still exists: %s", rs.Primary.ID)
   246  			}
   247  		}
   248  	}
   249  
   250  	return nil
   251  }
   252  
   253  func testAccCheckKubernetesPersistentVolumeExists(n string, obj *api.PersistentVolume) resource.TestCheckFunc {
   254  	return func(s *terraform.State) error {
   255  		rs, ok := s.RootModule().Resources[n]
   256  		if !ok {
   257  			return fmt.Errorf("Not found: %s", n)
   258  		}
   259  
   260  		conn := testAccProvider.Meta().(*kubernetes.Clientset)
   261  		name := rs.Primary.ID
   262  		out, err := conn.CoreV1().PersistentVolumes().Get(name, meta_v1.GetOptions{})
   263  		if err != nil {
   264  			return err
   265  		}
   266  
   267  		*obj = *out
   268  		return nil
   269  	}
   270  }
   271  
   272  func testAccKubernetesPersistentVolumeConfig_basic(name, diskName, zone string) string {
   273  	return fmt.Sprintf(`
   274  resource "kubernetes_persistent_volume" "test" {
   275  	metadata {
   276  		annotations {
   277  			TestAnnotationOne = "one"
   278  			TestAnnotationTwo = "two"
   279  		}
   280  		labels {
   281  			TestLabelOne = "one"
   282  			TestLabelTwo = "two"
   283  			TestLabelThree = "three"
   284  		}
   285  		name = "%s"
   286  	}
   287  	spec {
   288  		capacity {
   289  			storage = "123Gi"
   290  		}
   291  		access_modes = ["ReadWriteMany"]
   292  		persistent_volume_source {
   293  			gce_persistent_disk {
   294  				pd_name = "${google_compute_disk.test.name}"
   295  			}
   296  		}
   297  	}
   298  }
   299  
   300  resource "google_compute_disk" "test" {
   301    name  = "%s"
   302    type  = "pd-ssd"
   303    zone  = "%s"
   304    image = "debian-8-jessie-v20170523"
   305    size = 10
   306  }
   307  `, name, diskName, zone)
   308  }
   309  
   310  func testAccKubernetesPersistentVolumeConfig_modified(name, diskName, zone string) string {
   311  	return fmt.Sprintf(`
   312  resource "kubernetes_persistent_volume" "test" {
   313  	metadata {
   314  		annotations {
   315  			TestAnnotationOne = "one"
   316  			TestAnnotationTwo = "two"
   317  		}
   318  		labels {
   319  			TestLabelOne = "one"
   320  			TestLabelTwo = "two"
   321  			TestLabelThree = "three"
   322  		}
   323  		name = "%s"
   324  	}
   325  	spec {
   326  		capacity {
   327  			storage = "42Mi"
   328  		}
   329  		access_modes = ["ReadWriteMany", "ReadWriteOnce"]
   330  		persistent_volume_source {
   331  			gce_persistent_disk {
   332  				fs_type = "ntfs"
   333  				pd_name = "${google_compute_disk.test.name}"
   334  				read_only = true
   335  			}
   336  		}
   337  	}
   338  }
   339  
   340  resource "google_compute_disk" "test" {
   341    name  = "%s"
   342    type  = "pd-ssd"
   343    zone  = "%s"
   344    image = "debian-8-jessie-v20170523"
   345    size = 10
   346  }
   347  `, name, diskName, zone)
   348  }
   349  
   350  func testAccKubernetesPersistentVolumeConfig_volumeSource(name, diskName, zone string) string {
   351  	return fmt.Sprintf(`
   352  resource "kubernetes_persistent_volume" "test" {
   353  	metadata {
   354  		name = "%s"
   355  	}
   356  	spec {
   357  		capacity {
   358  			storage = "123Gi"
   359  		}
   360  		access_modes = ["ReadWriteMany"]
   361  		persistent_volume_source {
   362  			gce_persistent_disk {
   363  				pd_name = "${google_compute_disk.test.name}"
   364  			}
   365  		}
   366  	}
   367  }
   368  
   369  resource "google_compute_disk" "test" {
   370    name  = "%s"
   371    type  = "pd-ssd"
   372    zone  = "%s"
   373    image = "debian-8-jessie-v20170523"
   374    size = 12
   375  }
   376  `, name, diskName, zone)
   377  }
   378  
   379  func testAccKubernetesPersistentVolumeConfig_volumeSource_modified(name string) string {
   380  	return fmt.Sprintf(`
   381  resource "kubernetes_persistent_volume" "test" {
   382  	metadata {
   383  		name = "%s"
   384  	}
   385  	spec {
   386  		capacity {
   387  			storage = "123Gi"
   388  		}
   389  		access_modes = ["ReadWriteMany"]
   390  		persistent_volume_source {
   391  			host_path {
   392  				path = "/custom/testing/path"
   393  			}
   394  		}
   395  	}
   396  }`, name)
   397  }
   398  
   399  func testAccKubernetesPersistentVolumeConfig_cephFsSecretRef(name string) string {
   400  	return fmt.Sprintf(`
   401  resource "kubernetes_persistent_volume" "test" {
   402  	metadata {
   403  		name = "%s"
   404  	}
   405  	spec {
   406  		capacity {
   407  			storage = "2Gi"
   408  		}
   409  		access_modes = ["ReadWriteMany"]
   410  		persistent_volume_source {
   411  			ceph_fs {
   412  				monitors = ["10.16.154.78:6789", "10.16.154.82:6789"]
   413  				secret_ref {
   414  					name = "ceph-secret"
   415  				}
   416  			}
   417  		}
   418  	}
   419  }`, name)
   420  }