mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-26 22:11:38 +01:00
This PR adds a new controller - `DNSServerController` that starts tcp and udp dns servers locally. Just like `EtcFileController` it monitors `ResolverStatusType` and updates the list of destinations from there. Most of the caching logic is in our "lobotomized" "`CoreDNS` fork. We need this fork because default `CoreDNS` carries full Caddy server and various other modules that we don't need in Talos. On our side we implement random selection of the actual dns and request forwarding. Closes #7693 Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
28 lines
849 B
Go
28 lines
849 B
Go
// 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 ctxutil provides utilities for working with contexts.
|
|
package ctxutil
|
|
|
|
import "context"
|
|
|
|
// MonitorFn starts a function in a new goroutine and cancels the context with error as cause when the function returns.
|
|
// It returns the new context.
|
|
func MonitorFn(ctx context.Context, fn func() error) context.Context {
|
|
ctx, cancel := context.WithCancelCause(ctx)
|
|
|
|
go func() { cancel(fn()) }()
|
|
|
|
return ctx
|
|
}
|
|
|
|
// Cause returns the cause of the context error, or nil if there is no error or the error is a usual context error.
|
|
func Cause(ctx context.Context) error {
|
|
if c := context.Cause(ctx); c != ctx.Err() {
|
|
return c
|
|
}
|
|
|
|
return nil
|
|
}
|