| /* |
| Copyright 2016 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package lifecycle |
| |
| import "k8s.io/api/core/v1" |
| |
| // PodAdmitAttributes is the context for a pod admission decision. |
| // The member fields of this struct should never be mutated. |
| type PodAdmitAttributes struct { |
| // the pod to evaluate for admission |
| Pod *v1.Pod |
| // all pods bound to the kubelet excluding the pod being evaluated |
| OtherPods []*v1.Pod |
| } |
| |
| // PodAdmitResult provides the result of a pod admission decision. |
| type PodAdmitResult struct { |
| // if true, the pod should be admitted. |
| Admit bool |
| // a brief single-word reason why the pod could not be admitted. |
| Reason string |
| // a brief message explaining why the pod could not be admitted. |
| Message string |
| } |
| |
| // PodAdmitHandler is notified during pod admission. |
| type PodAdmitHandler interface { |
| // Admit evaluates if a pod can be admitted. |
| Admit(attrs *PodAdmitAttributes) PodAdmitResult |
| } |
| |
| // PodAdmitTarget maintains a list of handlers to invoke. |
| type PodAdmitTarget interface { |
| // AddPodAdmitHandler adds the specified handler. |
| AddPodAdmitHandler(a PodAdmitHandler) |
| } |
| |
| // PodSyncLoopHandler is invoked during each sync loop iteration. |
| type PodSyncLoopHandler interface { |
| // ShouldSync returns true if the pod needs to be synced. |
| // This operation must return immediately as its called for each pod. |
| // The provided pod should never be modified. |
| ShouldSync(pod *v1.Pod) bool |
| } |
| |
| // PodSyncLoopTarget maintains a list of handlers to pod sync loop. |
| type PodSyncLoopTarget interface { |
| // AddPodSyncLoopHandler adds the specified handler. |
| AddPodSyncLoopHandler(a PodSyncLoopHandler) |
| } |
| |
| // ShouldEvictResponse provides the result of a should evict request. |
| type ShouldEvictResponse struct { |
| // if true, the pod should be evicted. |
| Evict bool |
| // a brief CamelCase reason why the pod should be evicted. |
| Reason string |
| // a brief message why the pod should be evicted. |
| Message string |
| } |
| |
| // PodSyncHandler is invoked during each sync pod operation. |
| type PodSyncHandler interface { |
| // ShouldEvict is invoked during each sync pod operation to determine |
| // if the pod should be evicted from the kubelet. If so, the pod status |
| // is updated to mark its phase as failed with the provided reason and message, |
| // and the pod is immediately killed. |
| // This operation must return immediately as its called for each sync pod. |
| // The provided pod should never be modified. |
| ShouldEvict(pod *v1.Pod) ShouldEvictResponse |
| } |
| |
| // PodSyncTarget maintains a list of handlers to pod sync. |
| type PodSyncTarget interface { |
| // AddPodSyncHandler adds the specified handler |
| AddPodSyncHandler(a PodSyncHandler) |
| } |
| |
| // PodLifecycleTarget groups a set of lifecycle interfaces for convenience. |
| type PodLifecycleTarget interface { |
| PodAdmitTarget |
| PodSyncLoopTarget |
| PodSyncTarget |
| } |
| |
| // PodAdmitHandlers maintains a list of handlers to pod admission. |
| type PodAdmitHandlers []PodAdmitHandler |
| |
| // AddPodAdmitHandler adds the specified observer. |
| func (handlers *PodAdmitHandlers) AddPodAdmitHandler(a PodAdmitHandler) { |
| *handlers = append(*handlers, a) |
| } |
| |
| // PodSyncLoopHandlers maintains a list of handlers to pod sync loop. |
| type PodSyncLoopHandlers []PodSyncLoopHandler |
| |
| // AddPodSyncLoopHandler adds the specified observer. |
| func (handlers *PodSyncLoopHandlers) AddPodSyncLoopHandler(a PodSyncLoopHandler) { |
| *handlers = append(*handlers, a) |
| } |
| |
| // PodSyncHandlers maintains a list of handlers to pod sync. |
| type PodSyncHandlers []PodSyncHandler |
| |
| // AddPodSyncHandler adds the specified handler. |
| func (handlers *PodSyncHandlers) AddPodSyncHandler(a PodSyncHandler) { |
| *handlers = append(*handlers, a) |
| } |