...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package podiochaos
17
18 import (
19 "reflect"
20
21 "github.com/go-logr/logr"
22 ctrl "sigs.k8s.io/controller-runtime"
23 "sigs.k8s.io/controller-runtime/pkg/client"
24 "sigs.k8s.io/controller-runtime/pkg/event"
25 "sigs.k8s.io/controller-runtime/pkg/predicate"
26
27 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
28 "github.com/chaos-mesh/chaos-mesh/controllers/config"
29 "github.com/chaos-mesh/chaos-mesh/controllers/utils/builder"
30 "github.com/chaos-mesh/chaos-mesh/controllers/utils/chaosdaemon"
31 )
32
33 func Bootstrap(mgr ctrl.Manager, client client.Client, logger logr.Logger, b *chaosdaemon.ChaosDaemonClientBuilder) error {
34 if !config.ShouldSpawnController("podiochaos") {
35 return nil
36 }
37
38 return builder.Default(mgr).
39 For(&v1alpha1.PodIOChaos{}).
40 Named("podiochaos").
41 WithEventFilter(predicate.Funcs{
42 UpdateFunc: func(e event.UpdateEvent) bool {
43 oldObj := e.ObjectOld.(*v1alpha1.PodIOChaos)
44 newObj := e.ObjectNew.(*v1alpha1.PodIOChaos)
45
46 return !reflect.DeepEqual(oldObj.Spec, newObj.Spec)
47 },
48 }).
49 Complete(&Reconciler{
50 Client: client,
51 Log: logger.WithName("podiochaos"),
52 Recorder: mgr.GetEventRecorderFor("podiochaos"),
53 ChaosDaemonClientBuilder: b,
54 })
55 }
56