/
action_network_blackhole.go
executable file
·60 lines (53 loc) · 1.94 KB
/
action_network_blackhole.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2023 Steadybit GmbH
package extcontainer
import (
"context"
"encoding/json"
"fmt"
"github.com/steadybit/action-kit/go/action_kit_api/v2"
"github.com/steadybit/action-kit/go/action_kit_commons/network"
"github.com/steadybit/action-kit/go/action_kit_commons/runc"
"github.com/steadybit/action-kit/go/action_kit_sdk"
"github.com/steadybit/extension-kit/extbuild"
"github.com/steadybit/extension-kit/extutil"
)
func NewNetworkBlackholeContainerAction(runc runc.Runc) action_kit_sdk.Action[NetworkActionState] {
return &networkAction{
optsProvider: blackhole(runc),
optsDecoder: blackholeDecode,
description: getNetworkBlackholeDescription(),
runc: runc,
}
}
func getNetworkBlackholeDescription() action_kit_api.ActionDescription {
return action_kit_api.ActionDescription{
Id: fmt.Sprintf("%s.network_blackhole", BaseActionID),
Label: "Block Traffic",
Description: "Blocks network traffic (incoming and outgoing).",
Version: extbuild.GetSemverVersionStringOrUnknown(),
Icon: extutil.Ptr(blackHoleIcon),
TargetSelection: &action_kit_api.TargetSelection{
TargetType: targetID,
SelectionTemplates: &targetSelectionTemplates,
},
Category: extutil.Ptr("network"),
Kind: action_kit_api.Attack,
TimeControl: action_kit_api.TimeControlExternal,
Parameters: commonNetworkParameters,
}
}
func blackhole(r runc.Runc) networkOptsProvider {
return func(ctx context.Context, sidecar network.SidecarOpts, request action_kit_api.PrepareActionRequestBody) (network.Opts, error) {
filter, err := mapToNetworkFilter(ctx, r, sidecar, request.Config, getRestrictedEndpoints(request))
if err != nil {
return nil, err
}
return &network.BlackholeOpts{Filter: filter}, nil
}
}
func blackholeDecode(data json.RawMessage) (network.Opts, error) {
var opts network.BlackholeOpts
err := json.Unmarshal(data, &opts)
return &opts, err
}