func validatePersistenceVolumeClaims(c *k8sclient.Client, f *cmdutil.Factory) (Result, error) { ns, _, err := f.DefaultNamespace() if err != nil { return Failure, err } rc, err := c.PersistentVolumeClaims(ns).List(labels.Everything(), fields.Everything()) if err != nil { util.Fatalf("Failed to get PersistentVolumeClaims, %s in namespace %s\n", err, ns) } if rc != nil { items := rc.Items pendingClaimNames := make([]string, 0, len(items)) for _, item := range items { status := item.Status.Phase if status != "Bound" { pendingClaimNames = append(pendingClaimNames, item.ObjectMeta.Name) } } if len(pendingClaimNames) > 0 { util.Failuref("PersistentVolumeClaim not Bound for: %s. You need to create a PersistentVolume!\n", strings.Join(pendingClaimNames, ", ")) util.Info(` to generate a single node PersistentVolume then type something like this: cat <<EOF | oc create -f - --- kind: PersistentVolume apiVersion: v1 metadata: name: fabric8 spec: accessModes: - ReadWrite capacity: storage: 1000 hostPath: path: /opt/fabric8-data EOF `) return Failure, err } return Success, err } return Failure, err }
volumeTestCleanup(c, config) }() pod := startVolumeServer(c, config) serverIP := pod.Status.PodIP Logf("NFS server IP address: %v", serverIP) pv := makePersistentVolume(serverIP) pvc := makePersistentVolumeClaim(ns) Logf("Creating PersistentVolume using NFS") pv, err := c.PersistentVolumes().Create(pv) Expect(err).NotTo(HaveOccurred()) Logf("Creating PersistentVolumeClaim") pvc, err = c.PersistentVolumeClaims(ns).Create(pvc) Expect(err).NotTo(HaveOccurred()) // allow the binder a chance to catch up. should not be more than 20s. waitForPersistentVolumePhase(api.VolumeBound, c, pv.Name, 1*time.Second, 30*time.Second) pv, err = c.PersistentVolumes().Get(pv.Name) Expect(err).NotTo(HaveOccurred()) if pv.Spec.ClaimRef == nil { Failf("Expected PersistentVolume to be bound, but got nil ClaimRef: %+v", pv) } Logf("Deleting PersistentVolumeClaim to trigger PV Recycling") err = c.PersistentVolumeClaims(ns).Delete(pvc.Name) Expect(err).NotTo(HaveOccurred())