package generic import ( "context" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "sigs.k8s.io/structured-merge-diff/v4/fieldpath" ) // NewStatusREST makes a RESTStorage for status that has more limited options. // It is based on the original REST so that we can share the same underlying store func NewStatusREST(store *genericregistry.Store, strategy rest.UpdateResetFieldsStrategy) *StatusREST { statusStore := *store statusStore.CreateStrategy = nil statusStore.DeleteStrategy = nil statusStore.UpdateStrategy = strategy statusStore.ResetFieldsStrategy = strategy return &StatusREST{store: &statusStore} } // StatusREST implements the REST endpoint for changing the status of an DataPlaneService. type StatusREST struct { store *genericregistry.Store } var _ = rest.Patcher(&StatusREST{}) // New creates a new DataPlaneService object. func (r *StatusREST) New() runtime.Object { return r.store.NewFunc() } // Destroy cleans up resources on shutdown. func (r *StatusREST) Destroy() { // Given that underlying store is shared with REST, // we don't destroy it here explicitly. } // Get retrieves the object from the storage. It is required to support Patch. func (r *StatusREST) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. func (r *StatusREST) Update(ctx context.Context, name string, objInfo rest.UpdatedObjectInfo, createValidation rest.ValidateObjectFunc, updateValidation rest.ValidateObjectUpdateFunc, forceAllowCreate bool, options *metav1.UpdateOptions) (runtime.Object, bool, error) { // We are explicitly setting forceAllowCreate to false in the call to the underlying storage because // subresources should never allow create on update. return r.store.Update(ctx, name, objInfo, createValidation, updateValidation, false, options) } // GetResetFields implements rest.ResetFieldsStrategy func (r *StatusREST) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set { return r.store.GetResetFields() }