func TestPluginPersistentVolume(t *testing.T) { vol := &api.PersistentVolume{ ObjectMeta: api.ObjectMeta{ Name: "vol1", }, Spec: api.PersistentVolumeSpec{ PersistentVolumeSource: api.PersistentVolumeSource{ Glusterfs: &api.GlusterfsVolumeSource{"ep", "vol", false}, }, }, } doTestPlugin(t, volume.NewSpecFromPersistentVolume(vol)) }
func TestPluginPersistentVolume(t *testing.T) { vol := &api.PersistentVolume{ ObjectMeta: api.ObjectMeta{ Name: "vol1", }, Spec: api.PersistentVolumeSpec{ PersistentVolumeSource: api.PersistentVolumeSource{ NFS: &api.NFSVolumeSource{"localhost", "/tmp", false}, }, }, } doTestPlugin(t, volume.NewSpecFromPersistentVolume(vol)) }
func TestPluginPersistentVolume(t *testing.T) { vol := &api.PersistentVolume{ ObjectMeta: api.ObjectMeta{ Name: "vol1", }, Spec: api.PersistentVolumeSpec{ PersistentVolumeSource: api.PersistentVolumeSource{ RBD: &api.RBDVolumeSource{ CephMonitors: []string{"a", "b"}, RBDImage: "bar", FSType: "ext4", }, }, }, } doTestPlugin(t, volume.NewSpecFromPersistentVolume(vol)) }
func (recycler *PersistentVolumeRecycler) handleRecycle(pv *api.PersistentVolume) error { glog.V(5).Infof("Recycling PersistentVolume[%s]\n", pv.Name) currentPhase := pv.Status.Phase nextPhase := currentPhase spec := volume.NewSpecFromPersistentVolume(pv) plugin, err := recycler.pluginMgr.FindRecyclablePluginBySpec(spec) if err != nil { return fmt.Errorf("Could not find recyclable volume plugin for spec: %+v", err) } volRecycler, err := plugin.NewRecycler(spec) if err != nil { return fmt.Errorf("Could not obtain Recycler for spec: %+v", err) } // blocks until completion err = volRecycler.Recycle() if err != nil { glog.Errorf("PersistentVolume[%s] failed recycling: %+v", err) pv.Status.Message = fmt.Sprintf("Recycling error: %s", err) nextPhase = api.VolumeFailed } else { glog.V(5).Infof("PersistentVolume[%s] successfully recycled\n", pv.Name) nextPhase = api.VolumePending if err != nil { glog.Errorf("Error updating pv.Status: %+v", err) } } if currentPhase != nextPhase { glog.V(5).Infof("PersistentVolume[%s] changing phase from %s to %s\n", pv.Name, currentPhase, nextPhase) pv.Status.Phase = nextPhase _, err := recycler.client.UpdatePersistentVolumeStatus(pv) if err != nil { // Rollback to previous phase pv.Status.Phase = currentPhase } } return nil }