-
Notifications
You must be signed in to change notification settings - Fork 2
/
action_network_dns.go
73 lines (67 loc) · 2.4 KB
/
action_network_dns.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
61
62
63
64
65
66
67
68
69
70
71
72
73
// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2023 Steadybit GmbH
package extcontainer
import (
"context"
"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 NewNetworkBlockDnsContainerAction(r runc.Runc) action_kit_sdk.Action[NetworkActionState] {
return &networkAction{
optsProvider: blockDns(r),
optsDecoder: blackholeDecode,
description: getNetworkBlockDnsDescription(),
runc: r,
}
}
func getNetworkBlockDnsDescription() action_kit_api.ActionDescription {
return action_kit_api.ActionDescription{
Id: fmt.Sprintf("%s.network_block_dns", BaseActionID),
Label: "Block DNS",
Description: "Blocks access to DNS servers",
Version: extbuild.GetSemverVersionStringOrUnknown(),
Icon: extutil.Ptr(dnsIcon),
TargetSelection: &action_kit_api.TargetSelection{
TargetType: targetID,
SelectionTemplates: &targetSelectionTemplates,
},
Category: extutil.Ptr("network"),
Kind: action_kit_api.Attack,
TimeControl: action_kit_api.TimeControlExternal,
Parameters: []action_kit_api.ActionParameter{
{
Name: "duration",
Label: "Duration",
Description: extutil.Ptr("How long should the network be affected?"),
Type: action_kit_api.Duration,
DefaultValue: extutil.Ptr("30s"),
Required: extutil.Ptr(true),
Order: extutil.Ptr(0),
},
{
Name: "dnsPort",
Label: "Network Dns",
Description: extutil.Ptr("dnsPort"),
Type: action_kit_api.Integer,
DefaultValue: extutil.Ptr("53"),
Required: extutil.Ptr(true),
Order: extutil.Ptr(1),
MinValue: extutil.Ptr(1),
MaxValue: extutil.Ptr(65534),
},
},
}
}
func blockDns(_ runc.Runc) networkOptsProvider {
return func(ctx context.Context, sidecar network.SidecarOpts, request action_kit_api.PrepareActionRequestBody) (network.Opts, error) {
dnsPort := uint16(extutil.ToUInt(request.Config["dnsPort"]))
return &network.BlackholeOpts{
Filter: network.Filter{Include: network.NewNetWithPortRanges(network.NetAny, network.PortRange{From: dnsPort, To: dnsPort})},
}, nil
}
}