...
1
16
17 package storage
18
19 import (
20 "context"
21 "errors"
22 apierrors "k8s.io/apimachinery/pkg/api/errors"
23 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24 "k8s.io/apimachinery/pkg/runtime"
25 "k8s.io/apiserver/pkg/registry/generic"
26 genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
27 "k8s.io/apiserver/pkg/registry/rest"
28 "k8s.io/kubernetes/pkg/apis/scheduling"
29 schedulingapiv1 "k8s.io/kubernetes/pkg/apis/scheduling/v1"
30 "k8s.io/kubernetes/pkg/printers"
31 printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
32 printerstorage "k8s.io/kubernetes/pkg/printers/storage"
33 "k8s.io/kubernetes/pkg/registry/scheduling/priorityclass"
34 )
35
36
37 type REST struct {
38 *genericregistry.Store
39 }
40
41
42 func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, error) {
43 store := &genericregistry.Store{
44 NewFunc: func() runtime.Object { return &scheduling.PriorityClass{} },
45 NewListFunc: func() runtime.Object { return &scheduling.PriorityClassList{} },
46 DefaultQualifiedResource: scheduling.Resource("priorityclasses"),
47 SingularQualifiedResource: scheduling.Resource("priorityclass"),
48
49 CreateStrategy: priorityclass.Strategy,
50 UpdateStrategy: priorityclass.Strategy,
51 DeleteStrategy: priorityclass.Strategy,
52
53 TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)},
54 }
55 options := &generic.StoreOptions{RESTOptions: optsGetter}
56 if err := store.CompleteWithOptions(options); err != nil {
57 return nil, err
58 }
59
60 return &REST{store}, nil
61 }
62
63
64 var _ rest.ShortNamesProvider = &REST{}
65
66
67 func (r *REST) ShortNames() []string {
68 return []string{"pc"}
69 }
70
71
72 func (r *REST) Delete(ctx context.Context, name string, deleteValidation rest.ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error) {
73 for _, spc := range schedulingapiv1.SystemPriorityClasses() {
74 if name == spc.Name {
75 return nil, false, apierrors.NewForbidden(scheduling.Resource("priorityclasses"), spc.Name, errors.New("this is a system priority class and cannot be deleted"))
76 }
77 }
78
79 return r.Store.Delete(ctx, name, deleteValidation, options)
80 }
81
View as plain text