mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 14:37:00 +00:00
Merge pull request #102465 from ahg-g/ahg-vol-restrictions
Return UnschedulableAndUnresolvable when looking up volume-related resource returns NotFound error
This commit is contained in:
commit
46a4cc97ea
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user