...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package networkchaos
17
18 import (
19 "go.uber.org/fx"
20 "sigs.k8s.io/controller-runtime/pkg/client"
21
22 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
23 "github.com/chaos-mesh/chaos-mesh/controllers/action"
24 "github.com/chaos-mesh/chaos-mesh/controllers/chaosimpl/networkchaos/partition"
25 "github.com/chaos-mesh/chaos-mesh/controllers/chaosimpl/networkchaos/podnetworkchaosmanager"
26 "github.com/chaos-mesh/chaos-mesh/controllers/chaosimpl/networkchaos/trafficcontrol"
27 impltypes "github.com/chaos-mesh/chaos-mesh/controllers/chaosimpl/types"
28 )
29
30 type Impl struct {
31 fx.In
32
33 TrafficControl *trafficcontrol.Impl `action:"bandwidth,netem,delay,loss,duplicate,corrupt"`
34 Partition *partition.Impl `action:"partition"`
35 }
36
37 func NewImpl(impl Impl) *impltypes.ChaosImplPair {
38 delegate := action.NewMultiplexer(&impl)
39 return &impltypes.ChaosImplPair{
40 Name: "networkchaos",
41 Object: &v1alpha1.NetworkChaos{},
42 Impl: &delegate,
43 ObjectList: &v1alpha1.NetworkChaosList{},
44 Controlls: []client.Object{&v1alpha1.PodNetworkChaos{}},
45 }
46 }
47
48 var Module = fx.Provide(
49 fx.Annotated{
50 Group: "impl",
51 Target: NewImpl,
52 },
53 trafficcontrol.NewImpl,
54 partition.NewImpl,
55 podnetworkchaosmanager.NewBuilder,
56 )
57