...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package v1alpha1
15
16 import (
17 "fmt"
18 "reflect"
19 "time"
20
21 "k8s.io/apimachinery/pkg/runtime"
22 "k8s.io/apimachinery/pkg/util/validation/field"
23 logf "sigs.k8s.io/controller-runtime/pkg/log"
24 "sigs.k8s.io/controller-runtime/pkg/webhook"
25 )
26
27
28 var timechaoslog = logf.Log.WithName("timechaos-resource")
29
30
31
32 var _ webhook.Defaulter = &TimeChaos{}
33
34
35 func (in *TimeChaos) Default() {
36 timechaoslog.Info("default", "name", in.Name)
37
38 in.Spec.Selector.DefaultNamespace(in.GetNamespace())
39 in.Spec.Default()
40 }
41
42 func (in *TimeChaosSpec) Default() {
43 in.DefaultClockIds()
44 }
45
46
47
48 var _ webhook.Validator = &TimeChaos{}
49
50
51 func (in *TimeChaos) ValidateCreate() error {
52 timechaoslog.Info("validate create", "name", in.Name)
53 return in.Validate()
54 }
55
56
57 func (in *TimeChaos) ValidateUpdate(old runtime.Object) error {
58 timechaoslog.Info("validate update", "name", in.Name)
59 if !reflect.DeepEqual(in.Spec, old.(*TimeChaos).Spec) {
60 return ErrCanNotUpdateChaos
61 }
62 return in.Validate()
63 }
64
65
66 func (in *TimeChaos) ValidateDelete() error {
67 timechaoslog.Info("validate delete", "name", in.Name)
68
69
70 return nil
71 }
72
73
74 func (in *TimeChaos) Validate() error {
75 allErrs := in.Spec.Validate()
76
77 if len(allErrs) > 0 {
78 return fmt.Errorf(allErrs.ToAggregate().Error())
79 }
80 return nil
81 }
82
83 func (in *TimeChaosSpec) Validate() field.ErrorList {
84 specField := field.NewPath("spec")
85 allErrs := in.validateTimeOffset(specField.Child("timeOffset"))
86 allErrs = append(allErrs, validateDuration(in, specField)...)
87
88 return allErrs
89 }
90
91
92 func (in *TimeChaosSpec) validateTimeOffset(timeOffset *field.Path) field.ErrorList {
93 allErrs := field.ErrorList{}
94
95 _, err := time.ParseDuration(in.TimeOffset)
96 if err != nil {
97 allErrs = append(allErrs, field.Invalid(timeOffset,
98 in.TimeOffset,
99 fmt.Sprintf("parse timeOffset field error:%s", err)))
100 }
101
102 return allErrs
103 }
104