...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package action
17
18 import (
19 "context"
20 "fmt"
21
22 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
23 )
24
25 type chaosImplForAction1 struct {
26 }
27
28 func (it *chaosImplForAction1) Apply(ctx context.Context, index int, records []*v1alpha1.Record, obj v1alpha1.InnerObject) (v1alpha1.Phase, error) {
29 fmt.Println("action1-apply")
30 return v1alpha1.Injected, nil
31 }
32
33 func (it *chaosImplForAction1) Recover(ctx context.Context, index int, records []*v1alpha1.Record, obj v1alpha1.InnerObject) (v1alpha1.Phase, error) {
34 fmt.Println("action1-recover")
35 return v1alpha1.NotInjected, nil
36 }
37
38 type chaosImplForAction2 struct {
39 }
40
41 func (it *chaosImplForAction2) Apply(ctx context.Context, index int, records []*v1alpha1.Record, obj v1alpha1.InnerObject) (v1alpha1.Phase, error) {
42 fmt.Println("action2-apply")
43 return v1alpha1.Injected, nil
44 }
45
46 func (it *chaosImplForAction2) Recover(ctx context.Context, index int, records []*v1alpha1.Record, obj v1alpha1.InnerObject) (v1alpha1.Phase, error) {
47 fmt.Println("action2-recover")
48 return v1alpha1.NotInjected, nil
49 }
50
51 func ExampleMultiplexer() {
52 type adHoc struct {
53 AnyName1 *chaosImplForAction1 `action:"struct-tag"`
54 WhateverTheName *chaosImplForAction2 `action:"is-important"`
55 }
56 multiplexer := NewMultiplexer(&adHoc{
57 AnyName1: &chaosImplForAction1{},
58 WhateverTheName: &chaosImplForAction2{},
59 })
60
61
62 chaosA := v1alpha1.PodChaos{
63 Spec: v1alpha1.PodChaosSpec{
64 Action: "struct-tag",
65 },
66 }
67 chaosB := v1alpha1.PodChaos{
68 Spec: v1alpha1.PodChaosSpec{
69 Action: "is-important",
70 },
71 }
72
73 if _, err := multiplexer.Apply(context.Background(), 0, nil, &chaosA); err != nil {
74 panic(err)
75 }
76 if _, err := multiplexer.Recover(context.Background(), 0, nil, &chaosA); err != nil {
77 panic(err)
78 }
79 if _, err := multiplexer.Apply(context.Background(), 0, nil, &chaosB); err != nil {
80 panic(err)
81 }
82 if _, err := multiplexer.Recover(context.Background(), 0, nil, &chaosB); err != nil {
83 panic(err)
84 }
85
86
87
88
89
90 }
91