Return UnschedulableAndUnresolvable when looking up volume-related resources returns NotFound error
This commit is contained in:
		@@ -22,6 +22,7 @@ import (
 | 
				
			|||||||
	appsv1 "k8s.io/api/apps/v1"
 | 
						appsv1 "k8s.io/api/apps/v1"
 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						v1 "k8s.io/api/core/v1"
 | 
				
			||||||
	storagev1 "k8s.io/api/storage/v1"
 | 
						storagev1 "k8s.io/api/storage/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	appslisters "k8s.io/client-go/listers/apps/v1"
 | 
						appslisters "k8s.io/client-go/listers/apps/v1"
 | 
				
			||||||
@@ -311,7 +312,12 @@ func (classes StorageClassLister) Get(name string) (*storagev1.StorageClass, err
 | 
				
			|||||||
			return &sc, nil
 | 
								return &sc, nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil, fmt.Errorf("unable to find storage class: %s", name)
 | 
						return nil, &errors.StatusError{
 | 
				
			||||||
 | 
							ErrStatus: metav1.Status{
 | 
				
			||||||
 | 
								Reason:  metav1.StatusReasonNotFound,
 | 
				
			||||||
 | 
								Message: fmt.Sprintf("unable to find storage class: %s", name),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// List lists all StorageClass in the indexer.
 | 
					// List lists all StorageClass in the indexer.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						v1 "k8s.io/api/core/v1"
 | 
				
			||||||
	storage "k8s.io/api/storage/v1"
 | 
						storage "k8s.io/api/storage/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	corelisters "k8s.io/client-go/listers/core/v1"
 | 
						corelisters "k8s.io/client-go/listers/core/v1"
 | 
				
			||||||
@@ -112,8 +113,8 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
 | 
				
			|||||||
			return framework.NewStatus(framework.UnschedulableAndUnresolvable, "PersistentVolumeClaim had no name")
 | 
								return framework.NewStatus(framework.UnschedulableAndUnresolvable, "PersistentVolumeClaim had no name")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pvc, err := pl.pvcLister.PersistentVolumeClaims(pod.Namespace).Get(pvcName)
 | 
							pvc, err := pl.pvcLister.PersistentVolumeClaims(pod.Namespace).Get(pvcName)
 | 
				
			||||||
		if err != nil {
 | 
							if s := getErrorAsStatus(err); !s.IsSuccess() {
 | 
				
			||||||
			return framework.NewStatus(framework.UnschedulableAndUnresolvable, err.Error())
 | 
								return s
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pvName := pvc.Spec.VolumeName
 | 
							pvName := pvc.Spec.VolumeName
 | 
				
			||||||
@@ -124,9 +125,8 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			class, err := pl.scLister.Get(scName)
 | 
								class, err := pl.scLister.Get(scName)
 | 
				
			||||||
			if err != nil {
 | 
								if s := getErrorAsStatus(err); !s.IsSuccess() {
 | 
				
			||||||
				return framework.NewStatus(framework.UnschedulableAndUnresolvable, err.Error())
 | 
									return s
 | 
				
			||||||
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if class.VolumeBindingMode == nil {
 | 
								if class.VolumeBindingMode == nil {
 | 
				
			||||||
				return framework.NewStatus(framework.UnschedulableAndUnresolvable, fmt.Sprintf("VolumeBindingMode not set for StorageClass %q", scName))
 | 
									return framework.NewStatus(framework.UnschedulableAndUnresolvable, fmt.Sprintf("VolumeBindingMode not set for StorageClass %q", scName))
 | 
				
			||||||
@@ -140,8 +140,8 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pv, err := pl.pvLister.Get(pvName)
 | 
							pv, err := pl.pvLister.Get(pvName)
 | 
				
			||||||
		if err != nil {
 | 
							if s := getErrorAsStatus(err); !s.IsSuccess() {
 | 
				
			||||||
			return framework.NewStatus(framework.UnschedulableAndUnresolvable, err.Error())
 | 
								return s
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for k, v := range pv.ObjectMeta.Labels {
 | 
							for k, v := range pv.ObjectMeta.Labels {
 | 
				
			||||||
@@ -164,6 +164,16 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod *
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getErrorAsStatus(err error) *framework.Status {
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if errors.IsNotFound(err) {
 | 
				
			||||||
 | 
								return framework.NewStatus(framework.UnschedulableAndUnresolvable, err.Error())
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return framework.AsStatus(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EventsToRegister returns the possible events that may make a Pod
 | 
					// EventsToRegister returns the possible events that may make a Pod
 | 
				
			||||||
// failed by this plugin schedulable.
 | 
					// failed by this plugin schedulable.
 | 
				
			||||||
func (pl *VolumeZone) EventsToRegister() []framework.ClusterEvent {
 | 
					func (pl *VolumeZone) EventsToRegister() []framework.ClusterEvent {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user