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  }