...
1
16
17 package nodename
18
19 import (
20 "context"
21
22 v1 "k8s.io/api/core/v1"
23 "k8s.io/apimachinery/pkg/runtime"
24 "k8s.io/kubernetes/pkg/scheduler/framework"
25 "k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
26 )
27
28
29 type NodeName struct{}
30
31 var _ framework.FilterPlugin = &NodeName{}
32 var _ framework.EnqueueExtensions = &NodeName{}
33
34 const (
35
36 Name = names.NodeName
37
38
39 ErrReason = "node(s) didn't match the requested node name"
40 )
41
42
43
44 func (pl *NodeName) EventsToRegister() []framework.ClusterEventWithHint {
45 return []framework.ClusterEventWithHint{
46 {Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add | framework.Update}},
47 }
48 }
49
50
51 func (pl *NodeName) Name() string {
52 return Name
53 }
54
55
56 func (pl *NodeName) Filter(ctx context.Context, _ *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
57
58 if !Fits(pod, nodeInfo) {
59 return framework.NewStatus(framework.UnschedulableAndUnresolvable, ErrReason)
60 }
61 return nil
62 }
63
64
65 func Fits(pod *v1.Pod, nodeInfo *framework.NodeInfo) bool {
66 return len(pod.Spec.NodeName) == 0 || pod.Spec.NodeName == nodeInfo.Node().Name
67 }
68
69
70 func New(_ context.Context, _ runtime.Object, _ framework.Handle) (framework.Plugin, error) {
71 return &NodeName{}, nil
72 }
73
View as plain text