...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package v1alpha1
15
16 import (
17 "fmt"
18
19 "k8s.io/apimachinery/pkg/runtime"
20 "k8s.io/apimachinery/pkg/util/validation/field"
21 logf "sigs.k8s.io/controller-runtime/pkg/log"
22 "sigs.k8s.io/controller-runtime/pkg/webhook"
23 )
24
25
26 var kernelchaoslog = logf.Log.WithName("kernelchaos-resource")
27
28
29
30 var _ webhook.Defaulter = &KernelChaos{}
31
32
33 func (in *KernelChaos) Default() {
34 kernelchaoslog.Info("default", "name", in.Name)
35
36 in.Spec.Selector.DefaultNamespace(in.GetNamespace())
37 }
38
39
40
41 var _ ChaosValidator = &KernelChaos{}
42
43
44 func (in *KernelChaos) ValidateCreate() error {
45 kernelchaoslog.Info("validate create", "name", in.Name)
46 return in.Validate()
47 }
48
49
50 func (in *KernelChaos) ValidateUpdate(old runtime.Object) error {
51 kernelchaoslog.Info("validate update", "name", in.Name)
52 return in.Validate()
53 }
54
55
56 func (in *KernelChaos) ValidateDelete() error {
57 kernelchaoslog.Info("validate delete", "name", in.Name)
58
59
60 return nil
61 }
62
63
64 func (in *KernelChaos) Validate() error {
65 specField := field.NewPath("spec")
66 allErrs := in.ValidateScheduler(specField)
67 allErrs = append(allErrs, in.ValidatePodMode(specField)...)
68
69 if len(allErrs) > 0 {
70 return fmt.Errorf(allErrs.ToAggregate().Error())
71 }
72 return nil
73 }
74
75
76 func (in *KernelChaos) ValidateScheduler(spec *field.Path) field.ErrorList {
77 return ValidateScheduler(in, spec)
78 }
79
80
81 func (in *KernelChaos) ValidatePodMode(spec *field.Path) field.ErrorList {
82 return ValidatePodMode(in.Spec.Value, in.Spec.Mode, spec.Child("value"))
83 }
84
85
86 func (in *KernelChaos) GetSelectSpec() []SelectSpec {
87 return []SelectSpec{&in.Spec}
88 }
89