-
Notifications
You must be signed in to change notification settings - Fork 456
/
siderolink_launch_linux.go
104 lines (87 loc) · 3.06 KB
/
siderolink_launch_linux.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package mgmt
import (
"context"
"fmt"
"os"
"os/signal"
"github.com/siderolabs/siderolink/pkg/agent"
"github.com/siderolabs/siderolink/pkg/wireguard"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
"go.uber.org/zap"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
)
var siderolinkFlags struct {
joinToken string
wireguardEndpoint string
sinkEndpoint string
apiEndpoint string
logEndpoint string
predefinedPairs []string
}
var siderolinkCmd = &cobra.Command{
Use: "siderolink-launch",
Short: "Internal command used by cluster create to launch siderolink agent",
Long: ``,
Args: cobra.NoArgs,
Hidden: true,
RunE: func(cmd *cobra.Command, args []string) error {
ctx, cancel := signal.NotifyContext(cmd.Context(), os.Interrupt)
defer cancel()
return run(ctx)
},
}
func init() {
siderolinkCmd.PersistentFlags().StringVar(&siderolinkFlags.joinToken, "sidero-link-join-token", "", "join token for the cluster")
siderolinkCmd.PersistentFlags().StringVar(&siderolinkFlags.wireguardEndpoint, "sidero-link-wireguard-endpoint", "", "advertised Wireguard endpoint")
siderolinkCmd.PersistentFlags().StringVar(&siderolinkFlags.sinkEndpoint, "event-sink-endpoint", "", "gRPC API endpoint for the Event Sink")
siderolinkCmd.PersistentFlags().StringVar(&siderolinkFlags.apiEndpoint, "sidero-link-api-endpoint", "", "gRPC API endpoint for the SideroLink")
siderolinkCmd.PersistentFlags().StringVar(&siderolinkFlags.logEndpoint, "log-receiver-endpoint", "", "TCP log receiver endpoint")
siderolinkCmd.PersistentFlags().StringArrayVar(&siderolinkFlags.predefinedPairs, "predefined-pair", nil, "predefined pairs of UUID=IPv6 addrs for the nodes")
siderolinkCmd.PersistentFlags().VisitAll(func(flag *pflag.Flag) {
err := siderolinkCmd.PersistentFlags().MarkHidden(flag.Name)
if err != nil {
panic(err)
}
})
addCommand(siderolinkCmd)
}
func run(ctx context.Context) error {
logger, err := zap.NewDevelopment()
if err != nil {
return err
}
logger.Info("starting embedded siderolink agent")
defer logger.Info("stopping embedded siderolink agent")
err = agent.Run(
ctx,
agent.Config{
WireguardEndpoint: siderolinkFlags.wireguardEndpoint,
APIEndpoint: siderolinkFlags.apiEndpoint,
JoinToken: siderolinkFlags.joinToken,
SinkEndpoint: siderolinkFlags.sinkEndpoint,
LogEndpoint: siderolinkFlags.logEndpoint,
UUIDIPv6Pairs: siderolinkFlags.predefinedPairs,
ForceUserspace: true,
},
&handler{l: logger},
logger,
)
if err != nil {
return fmt.Errorf("failed to run siderolink agent: %w", err)
}
return nil
}
type handler struct {
l *zap.Logger
}
func (h *handler) HandlePeerAdded(event wireguard.PeerEvent) error {
h.l.Info("talos agent sees peer added", zap.String("address", event.Address.String()))
return nil
}
func (h *handler) HandlePeerRemoved(wgtypes.Key) error {
return nil
}