mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-28 15:01:13 +01:00
This changes will make easier running networkd as a goroutine in machined. Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
109 lines
2.1 KiB
Go
109 lines
2.1 KiB
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 main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"runtime"
|
|
"syscall"
|
|
|
|
"golang.org/x/sync/errgroup"
|
|
|
|
"github.com/talos-systems/talos/internal/app/networkd/pkg/networkd"
|
|
"github.com/talos-systems/talos/internal/app/networkd/pkg/reg"
|
|
"github.com/talos-systems/talos/pkg/grpc/factory"
|
|
"github.com/talos-systems/talos/pkg/machinery/config/configloader"
|
|
"github.com/talos-systems/talos/pkg/machinery/constants"
|
|
)
|
|
|
|
func init() {
|
|
// Explicitly disable memory profiling to save around 1.4MiB of memory.
|
|
runtime.MemProfileRate = 0
|
|
}
|
|
|
|
func main() {
|
|
logger := log.New(os.Stderr, "", log.Lshortfile|log.Ldate|log.Lmicroseconds|log.Ltime)
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
go func() {
|
|
defer cancel()
|
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, syscall.SIGTERM, os.Interrupt)
|
|
|
|
select {
|
|
case <-sigCh:
|
|
case <-ctx.Done():
|
|
}
|
|
}()
|
|
|
|
if err := run(ctx, logger); err != nil {
|
|
logger.Fatal(err)
|
|
}
|
|
|
|
logger.Println("networkd stopped")
|
|
}
|
|
|
|
func run(ctx context.Context, logger *log.Logger) error {
|
|
var eg errgroup.Group
|
|
|
|
config, err := configloader.NewFromStdin()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
logger.Println("starting initial network configuration")
|
|
|
|
nwd, err := networkd.New(logger, config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = nwd.Configure(ctx); err != nil {
|
|
return err
|
|
}
|
|
|
|
registrator, err := reg.NewRegistrator(logger, nwd)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = nwd.RunControllers(ctx, &eg); err != nil {
|
|
return err
|
|
}
|
|
|
|
logger.Println("completed initial network configuration")
|
|
|
|
nwd.Renew(ctx)
|
|
|
|
server := factory.NewServer(
|
|
registrator,
|
|
factory.WithDefaultLog(),
|
|
)
|
|
|
|
listener, err := factory.NewListener(
|
|
factory.Network("unix"),
|
|
factory.SocketPath(constants.NetworkSocketPath),
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
eg.Go(func() error {
|
|
return server.Serve(listener)
|
|
})
|
|
|
|
<-ctx.Done()
|
|
|
|
server.GracefulStop()
|
|
|
|
return eg.Wait()
|
|
}
|