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