Skip to content

Commit

Permalink
feat: provide negative address filter support
Browse files Browse the repository at this point in the history
This allows to filter out addresses reported by Talos machines to
SideroMetal and which appear under `Machine.status.addresses`.

Fixes #1368

Signed-off-by: Andrey Smirnov <[email protected]>
  • Loading branch information
smira committed May 23, 2024
1 parent cb907cf commit a30f4d9
Show file tree
Hide file tree
Showing 10 changed files with 110 additions and 70 deletions.
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ MODULE := $(shell head -1 go.mod | cut -d' ' -f2)

ARTIFACTS := _out
TEST_PKGS ?= ./...
TALOS_RELEASE ?= v1.7.0
TALOS_RELEASE ?= v1.7.2
DEFAULT_K8S_VERSION ?= v1.29.3

TOOLS ?= ghcr.io/siderolabs/tools:v1.7.0-1-g10b2a69
PKGS ?= v1.7.0-5-gb7f1920
TOOLS ?= ghcr.io/siderolabs/tools:v1.7.0-2-g345db93
PKGS ?= v1.7.0-15-g82b048a

SFYRA_CLUSTERCTL_CONFIG ?= $(HOME)/.cluster-api/clusterctl.sfyra.yaml

Expand Down
72 changes: 42 additions & 30 deletions app/sidero-controller-manager/cmd/events-manager/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ import (
"sigs.k8s.io/cluster-api/util/patch"
runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"

"github.com/siderolabs/gen/xslices"

sidero "github.com/siderolabs/sidero/app/caps-controller-manager/api/v1alpha3"
"github.com/siderolabs/sidero/app/sidero-controller-manager/internal/siderolink"

"github.com/siderolabs/siderolink/pkg/events"

"github.com/siderolabs/talos/pkg/machinery/api/common"
Expand All @@ -30,17 +31,19 @@ import (
type Adapter struct {
Sink *events.Sink

logger *zap.Logger
annotator *siderolink.Annotator
metalClient runtimeclient.Client
logger *zap.Logger
annotator *siderolink.Annotator
metalClient runtimeclient.Client
negativeAddressFilter []netip.Prefix
}

// NewAdapter initializes new server.
func NewAdapter(metalClient runtimeclient.Client, annotator *siderolink.Annotator, logger *zap.Logger) *Adapter {
func NewAdapter(metalClient runtimeclient.Client, annotator *siderolink.Annotator, logger *zap.Logger, negativeAddressFilter []netip.Prefix) *Adapter {
return &Adapter{
logger: logger,
annotator: annotator,
metalClient: metalClient,
logger: logger,
annotator: annotator,
metalClient: metalClient,
negativeAddressFilter: negativeAddressFilter,
}
}

Expand All @@ -62,9 +65,9 @@ func (a *Adapter) HandleEvent(ctx context.Context, event events.Event) error {
return err
}

ip := ipPort.Addr().String()
ip := ipPort.Addr()

annotation, _ := a.annotator.Get(ip)
annotation, _ := a.annotator.Get(ip.String())

if annotation.ServerUUID != "" {
fields = append(fields, zap.String("server_uuid", annotation.ServerUUID))
Expand All @@ -88,23 +91,32 @@ func (a *Adapter) HandleEvent(ctx context.Context, event events.Event) error {

switch event := event.Payload.(type) {
case *machine.AddressEvent:
fields = append(fields, zap.String("hostname", event.GetHostname()), zap.String("addresses", strings.Join(event.GetAddresses(), ",")))

// filter out SideroLink address from the list
addresses := event.Addresses

n := 0

for _, addr := range addresses {
if addr != ip {
addresses[n] = addr
n++
}
}

addresses = addresses[:n]
fields = append(fields, zap.String("hostname", event.GetHostname()), zap.Strings("addresses", event.GetAddresses()))

// filter out SideroLink address and other negative matches from the list
addresses := xslices.Filter(event.Addresses,
func(addrStr string) bool {
addr, err := netip.ParseAddr(addrStr)
if err != nil {
// invalid address
return false
}

if addr == ip {
// SideroLink address
return false
}

for _, prefix := range a.negativeAddressFilter {
if prefix.Contains(addr) {
return false
}
}

return true
})

err = a.patchServerBinding(ctx, ip, func(serverbinding *sidero.ServerBinding) {
err = a.patchServerBinding(ctx, ip.String(), func(serverbinding *sidero.ServerBinding) {
serverbinding.Spec.Addresses = addresses
serverbinding.Spec.Hostname = event.Hostname
})
Expand All @@ -114,19 +126,19 @@ func (a *Adapter) HandleEvent(ctx context.Context, event events.Event) error {
case *machine.ConfigValidationErrorEvent:
fields = append(fields, zap.Error(fmt.Errorf(event.GetError())))

if err = a.handleConfigValidationFailedEvent(ctx, ip, event); err != nil {
if err = a.handleConfigValidationFailedEvent(ctx, ip.String(), event); err != nil {
return err
}
case *machine.ConfigLoadErrorEvent:
fields = append(fields, zap.Error(fmt.Errorf(event.GetError())))

if err = a.handleConfigLoadFailedEvent(ctx, ip, event); err != nil {
if err = a.handleConfigLoadFailedEvent(ctx, ip.String(), event); err != nil {
return err
}
case *machine.PhaseEvent:
fields = append(fields, zap.String("phase", event.GetPhase()), zap.String("action", event.GetAction().String()))

if err = a.handlePhaseEvent(ctx, ip, event); err != nil {
if err = a.handlePhaseEvent(ctx, ip.String(), event); err != nil {
return err
}
case *machine.TaskEvent:
Expand All @@ -137,7 +149,7 @@ func (a *Adapter) HandleEvent(ctx context.Context, event events.Event) error {
case *machine.SequenceEvent:
fields = append(fields, zap.String("sequence", event.GetSequence()), zap.String("action", event.GetAction().String()))

if err = a.handleSequenceEvent(ctx, ip, event); err != nil {
if err = a.handleSequenceEvent(ctx, ip.String(), event); err != nil {
return err
}

Expand Down
24 changes: 22 additions & 2 deletions app/sidero-controller-manager/cmd/events-manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ package main
import (
"context"
"errors"
"flag"
"fmt"
"net"
"net/netip"
"os"
"os/signal"
"syscall"

"github.com/siderolabs/talos/pkg/machinery/api/machine"
"github.com/spf13/pflag"
"go.uber.org/zap"
"golang.org/x/sync/errgroup"
"google.golang.org/grpc"
Expand All @@ -26,8 +27,11 @@ import (
"github.com/siderolabs/sidero/app/sidero-controller-manager/internal/siderolink"
)

var negativeAddressFilter []string

func main() {
flag.Parse()
pflag.StringSliceVar(&negativeAddressFilter, "negative-address-filter", nil, "list of CIDR prefixes to filter out from the address events")
pflag.Parse()

if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %s", err)
Expand All @@ -47,6 +51,21 @@ func run() error {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer cancel()

negativeFilter := make([]netip.Prefix, 0, len(negativeAddressFilter))

for _, prefixStr := range negativeAddressFilter {
if prefixStr == "-" {
continue
}

prefix, err := netip.ParsePrefix(prefixStr)
if err != nil {
return err
}

negativeFilter = append(negativeFilter, prefix)
}

eg, ctx := errgroup.WithContext(ctx)

address := fmt.Sprintf(":%d", siderolink.EventsSinkPort)
Expand All @@ -68,6 +87,7 @@ func run() error {
adapter := NewAdapter(client,
annotator,
logger.With(zap.String("component", "sink")),
negativeFilter,
)

srv := sink.NewSink(adapter,
Expand Down
1 change: 1 addition & 0 deletions app/sidero-controller-manager/config/manager/manager.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ spec:
memory: 128Mi
- command:
- /events-manager
- --negative-address-filter=${SIDERO_CONTROLLER_MANAGER_EVENTS_NEGATIVE_ADDRESS_FILTER:=-}
image: controller:latest
imagePullPolicy: Always
name: serverevents
Expand Down
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/siderolabs/sidero

go 1.22.2
go 1.22.3

replace github.com/pensando/goipmi v0.0.0-20200303170213-e858ec1cf0b5 => github.com/talos-systems/goipmi v0.0.0-20211214143420-35f956689e67

Expand All @@ -9,8 +9,8 @@ require (
github.com/google/go-cmp v0.6.0
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/hashicorp/go-multierror v1.1.1
github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8
github.com/jsimonetti/rtnetlink v1.4.1
github.com/insomniacslk/dhcp v0.0.0-20240419123447-f1cffa2c0c49
github.com/jsimonetti/rtnetlink v1.4.2
github.com/pensando/goipmi v0.0.0-20200303170213-e858ec1cf0b5
github.com/pin/tftp v2.1.1-0.20200117065540-2f79be2dba4e+incompatible
github.com/pkg/errors v0.9.1
Expand All @@ -25,13 +25,13 @@ require (
github.com/siderolabs/go-smbios v0.3.2
github.com/siderolabs/grpc-proxy v0.4.0
github.com/siderolabs/siderolink v0.3.5
github.com/siderolabs/talos/pkg/machinery v1.7.0
github.com/siderolabs/talos/pkg/machinery v1.7.2
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.9.0
go.uber.org/zap v1.27.0
golang.org/x/net v0.24.0
golang.org/x/sync v0.7.0
golang.org/x/sys v0.19.0
golang.org/x/sys v0.20.0
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
google.golang.org/grpc v1.62.1
google.golang.org/protobuf v1.33.0
Expand All @@ -42,7 +42,7 @@ require (
k8s.io/client-go v0.29.3
k8s.io/component-base v0.29.3
k8s.io/klog/v2 v2.110.1
sigs.k8s.io/cluster-api v1.7.0
sigs.k8s.io/cluster-api v1.7.2
sigs.k8s.io/controller-runtime v0.17.3
)

Expand Down
14 changes: 10 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8 h1:V3plQrMHRWOB5zMm3yNqvBxDQVW1+/wHBSok5uPdmVs=
github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8/go.mod h1:izxuNQZeFrbx2nK2fAyN5iNUB34Fe9j0nK4PwLzAkKw=
github.com/insomniacslk/dhcp v0.0.0-20240419123447-f1cffa2c0c49 h1:/OuvSMGT9+xnyZ+7MZQ1zdngaCCAdPoSw8B/uurZ7pg=
github.com/insomniacslk/dhcp v0.0.0-20240419123447-f1cffa2c0c49/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
Expand All @@ -175,6 +177,8 @@ github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtL
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/jsimonetti/rtnetlink v1.4.1 h1:JfD4jthWBqZMEffc5RjgmlzpYttAVw1sdnmiNaPO3hE=
github.com/jsimonetti/rtnetlink v1.4.1/go.mod h1:xJjT7t59UIZ62GLZbv6PLLo8VFrostJMPBAheR6OM8w=
github.com/jsimonetti/rtnetlink v1.4.2 h1:Df9w9TZ3npHTyDn0Ev9e1uzmN2odmXd0QX+J5GTEn90=
github.com/jsimonetti/rtnetlink v1.4.2/go.mod h1:92s6LJdE+1iOrw+F2/RO7LYI2Qd8pPpFNNUYW06gcoM=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
Expand Down Expand Up @@ -291,8 +295,8 @@ github.com/siderolabs/net v0.4.0 h1:1bOgVay/ijPkJz4qct98nHsiB/ysLQU0KLoBC4qLm7I=
github.com/siderolabs/net v0.4.0/go.mod h1:/ibG+Hm9HU27agp5r9Q3eZicEfjquzNzQNux5uEk0kM=
github.com/siderolabs/siderolink v0.3.5 h1:sU4WNGCRGQYZ/sQZaVQbGfUNOqS561oL4kafKlo4FDY=
github.com/siderolabs/siderolink v0.3.5/go.mod h1:/7Dg0Nkh4q/8yqsY/VirDOTOFOqRvPikagCoyf3+Mf4=
github.com/siderolabs/talos/pkg/machinery v1.7.0 h1:fZiqXwdraM0lfN6/MtBO6sSkeUCaKBtGfP7VUBpOXao=
github.com/siderolabs/talos/pkg/machinery v1.7.0/go.mod h1:YBl9KDCD45Uc7N0rXBY1JqovUn1n46ekUPSNbEVZzQU=
github.com/siderolabs/talos/pkg/machinery v1.7.2 h1:BOE+GM6iUpSb0bOZIajF9h/vNKVtjAxu+ntAPPQrugw=
github.com/siderolabs/talos/pkg/machinery v1.7.2/go.mod h1:85iUG7/XS654ki2Rkk7kTEU8YsnNhj6vAr7TnpbOebk=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
Expand Down Expand Up @@ -442,6 +446,8 @@ golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
Expand Down Expand Up @@ -557,8 +563,8 @@ k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6R
k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2SGwkQasmbeqDo8th5wOBA5h/AjTKA4I=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
sigs.k8s.io/cluster-api v1.7.0 h1:sWK6xs2MkCqPZhumsrti0OdKyGcu/c5aBz9XAWFIq5E=
sigs.k8s.io/cluster-api v1.7.0/go.mod h1:V9ZhKLvQtsDODwjXOKgbitjyCmC71yMBwDcMyNNIov0=
sigs.k8s.io/cluster-api v1.7.2 h1:bRE8zoao7ajuLC0HijqfZVcubKQCPlZ04HMgcA53FGE=
sigs.k8s.io/cluster-api v1.7.2/go.mod h1:V9ZhKLvQtsDODwjXOKgbitjyCmC71yMBwDcMyNNIov0=
sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
Expand Down
2 changes: 1 addition & 1 deletion go.work
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
go 1.22.2
go 1.22.3

use (
.
Expand Down
24 changes: 12 additions & 12 deletions sfyra/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/siderolabs/sidero/sfyra

go 1.22.2
go 1.22.3

replace (
// local replace
Expand Down Expand Up @@ -28,18 +28,18 @@ require (
github.com/siderolabs/go-retry v0.3.3
github.com/siderolabs/net v0.4.0
github.com/siderolabs/sidero v0.0.0-00010101000000-000000000000
github.com/siderolabs/talos v1.7.0
github.com/siderolabs/talos/pkg/machinery v1.7.0
github.com/siderolabs/talos v1.7.2
github.com/siderolabs/talos/pkg/machinery v1.7.2
github.com/spf13/cobra v1.8.0
github.com/stretchr/testify v1.9.0
go.uber.org/zap v1.27.0
google.golang.org/grpc v1.62.1
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.30.0
k8s.io/api v0.30.1
k8s.io/apiextensions-apiserver v0.29.3
k8s.io/apimachinery v0.30.0
k8s.io/client-go v0.30.0
sigs.k8s.io/cluster-api v1.7.0
k8s.io/apimachinery v0.30.1
k8s.io/client-go v0.30.1
sigs.k8s.io/cluster-api v1.7.2
sigs.k8s.io/controller-runtime v0.17.3
)

Expand Down Expand Up @@ -102,10 +102,10 @@ require (
github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.13 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/insomniacslk/dhcp v0.0.0-20240227161007-c728f5dd21c8 // indirect
github.com/insomniacslk/dhcp v0.0.0-20240419123447-f1cffa2c0c49 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/jsimonetti/rtnetlink v1.4.1 // indirect
github.com/jsimonetti/rtnetlink v1.4.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.7 // indirect
github.com/magiconair/properties v1.8.7 // indirect
Expand Down Expand Up @@ -169,7 +169,7 @@ require (
golang.org/x/net v0.24.0 // indirect
golang.org/x/oauth2 v0.18.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.5.0 // indirect
Expand All @@ -181,9 +181,9 @@ require (
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/apiserver v0.30.0 // indirect
k8s.io/apiserver v0.30.1 // indirect
k8s.io/cluster-bootstrap v0.29.3 // indirect
k8s.io/component-base v0.30.0 // indirect
k8s.io/component-base v0.30.1 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect
Expand Down
Loading

0 comments on commit a30f4d9

Please sign in to comment.