github.com/gocrane/crane@v0.11.0/pkg/recommendation/recommender/volume/recommend.go (about) 1 package volume 2 3 import ( 4 "fmt" 5 6 corev1 "k8s.io/api/core/v1" 7 8 "github.com/gocrane/crane/pkg/recommendation/framework" 9 ) 10 11 func (vr *VolumeRecommender) PreRecommend(ctx *framework.RecommendationContext) error { 12 return nil 13 } 14 15 func (vr *VolumeRecommender) Recommend(ctx *framework.RecommendationContext) error { 16 // Check if each volume is being used by any pods 17 isOrphanVolume := true 18 var pv corev1.PersistentVolume 19 if err := framework.ObjectConversion(ctx.Object, &pv); err != nil { 20 return err 21 } 22 for _, pod := range ctx.Pods { 23 for _, volumeClaim := range pod.Spec.Volumes { 24 if volumeClaim.PersistentVolumeClaim == nil { 25 continue 26 } 27 if volumeClaim.PersistentVolumeClaim.ClaimName == pv.Spec.ClaimRef.Name { 28 isOrphanVolume = false 29 } 30 } 31 } 32 if !isOrphanVolume { 33 return fmt.Errorf("Volume %s is not an orphan volume ", ctx.Object.GetName()) 34 } 35 ctx.Recommendation.Status.Action = "Delete" 36 ctx.Recommendation.Status.Description = "It is an Orphan Volumes" 37 return nil 38 } 39 40 // Policy add some logic for result of recommend phase. 41 func (vr *VolumeRecommender) Policy(ctx *framework.RecommendationContext) error { 42 return nil 43 }