mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-09-19 04:24:39 -04:00
deps: convert zap to slog (#2825)
This commit is contained in:
parent
3765cb0762
commit
54cce77bab
182 changed files with 1474 additions and 1509 deletions
|
@ -5,9 +5,5 @@ go_library(
|
|||
srcs = ["diskencryption.go"],
|
||||
importpath = "github.com/edgelesssys/constellation/v2/disk-mapper/internal/diskencryption",
|
||||
visibility = ["//disk-mapper:__subpackages__"],
|
||||
deps = [
|
||||
"//internal/cryptsetup",
|
||||
"//internal/logger",
|
||||
"@org_uber_go_zap//:zap",
|
||||
],
|
||||
deps = ["//internal/cryptsetup"],
|
||||
)
|
||||
|
|
|
@ -15,22 +15,21 @@ package diskencryption
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/edgelesssys/constellation/v2/internal/cryptsetup"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// DiskEncryption handles actions for formatting and mapping crypt devices.
|
||||
type DiskEncryption struct {
|
||||
device cryptDevice
|
||||
devicePath string
|
||||
log *logger.Logger
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// New creates a new crypt device for the device at path.
|
||||
func New(path string, log *logger.Logger) (*DiskEncryption, func(), error) {
|
||||
func New(path string, log *slog.Logger) (*DiskEncryption, func(), error) {
|
||||
device := cryptsetup.New()
|
||||
_, err := device.Init(path)
|
||||
if err != nil {
|
||||
|
@ -101,7 +100,7 @@ func (d *DiskEncryption) UnmapDisk(target string) error {
|
|||
func (d *DiskEncryption) Wipe(blockWipeSize int) error {
|
||||
logProgress := func(size, offset uint64) {
|
||||
prog := (float64(offset) / float64(size)) * 100
|
||||
d.log.With(zap.String("progress", fmt.Sprintf("%.2f%%", prog))).Infof("Wiping disk")
|
||||
d.log.With(slog.String("progress", fmt.Sprintf("%.2f%%", prog))).Info("Wiping disk")
|
||||
}
|
||||
|
||||
start := time.Now()
|
||||
|
@ -109,7 +108,7 @@ func (d *DiskEncryption) Wipe(blockWipeSize int) error {
|
|||
if err := d.device.Wipe("integrity", blockWipeSize, 0, logProgress, 30*time.Second); err != nil {
|
||||
return fmt.Errorf("wiping disk: %w", err)
|
||||
}
|
||||
d.log.With(zap.Duration("duration", time.Since(start))).Infof("Wiping disk successful")
|
||||
d.log.With(slog.Duration("duration", time.Since(start))).Info("Wiping disk successful")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ go_library(
|
|||
"@org_golang_google_grpc//:go_default_library",
|
||||
"@org_golang_google_grpc//codes",
|
||||
"@org_golang_google_grpc//status",
|
||||
"@org_uber_go_zap//:zap",
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ package recoveryserver
|
|||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"net"
|
||||
"sync"
|
||||
|
||||
|
@ -27,7 +28,6 @@ import (
|
|||
"github.com/edgelesssys/constellation/v2/internal/grpc/grpclog"
|
||||
"github.com/edgelesssys/constellation/v2/internal/kms/kms"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
@ -45,13 +45,13 @@ type RecoveryServer struct {
|
|||
grpcServer server
|
||||
factory kmsFactory
|
||||
|
||||
log *logger.Logger
|
||||
log *slog.Logger
|
||||
|
||||
recoverproto.UnimplementedAPIServer
|
||||
}
|
||||
|
||||
// New returns a new RecoveryServer.
|
||||
func New(issuer atls.Issuer, factory kmsFactory, log *logger.Logger) *RecoveryServer {
|
||||
func New(issuer atls.Issuer, factory kmsFactory, log *slog.Logger) *RecoveryServer {
|
||||
server := &RecoveryServer{
|
||||
log: log,
|
||||
factory: factory,
|
||||
|
@ -59,7 +59,7 @@ func New(issuer atls.Issuer, factory kmsFactory, log *logger.Logger) *RecoverySe
|
|||
|
||||
grpcServer := grpc.NewServer(
|
||||
grpc.Creds(atlscredentials.New(issuer, nil)),
|
||||
log.Named("gRPC").GetServerStreamInterceptor(),
|
||||
logger.GetServerStreamInterceptor(log.WithGroup("gRPC")),
|
||||
)
|
||||
recoverproto.RegisterAPIServer(grpcServer, server)
|
||||
|
||||
|
@ -72,7 +72,7 @@ func New(issuer atls.Issuer, factory kmsFactory, log *logger.Logger) *RecoverySe
|
|||
// The server will shut down when the call is successful and the keys are returned.
|
||||
// Additionally, the server can be shutdown by canceling the context.
|
||||
func (s *RecoveryServer) Serve(ctx context.Context, listener net.Listener, diskUUID string) (diskKey, measurementSecret []byte, err error) {
|
||||
s.log.Infof("Starting RecoveryServer")
|
||||
s.log.Info("Starting RecoveryServer")
|
||||
s.diskUUID = diskUUID
|
||||
recoveryDone := make(chan struct{}, 1)
|
||||
var serveErr error
|
||||
|
@ -89,7 +89,7 @@ func (s *RecoveryServer) Serve(ctx context.Context, listener net.Listener, diskU
|
|||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
s.log.Infof("Context canceled, shutting down server")
|
||||
s.log.Info("Context canceled, shutting down server")
|
||||
s.grpcServer.GracefulStop()
|
||||
return nil, nil, ctx.Err()
|
||||
case <-recoveryDone:
|
||||
|
@ -105,9 +105,9 @@ func (s *RecoveryServer) Serve(ctx context.Context, listener net.Listener, diskU
|
|||
func (s *RecoveryServer) Recover(ctx context.Context, req *recoverproto.RecoverMessage) (*recoverproto.RecoverResponse, error) {
|
||||
s.mux.Lock()
|
||||
defer s.mux.Unlock()
|
||||
log := s.log.With(zap.String("peer", grpclog.PeerAddrFromContext(ctx)))
|
||||
log := s.log.With(slog.String("peer", grpclog.PeerAddrFromContext(ctx)))
|
||||
|
||||
log.Infof("Received recover call")
|
||||
log.Info("Received recover call")
|
||||
|
||||
cloudKms, err := s.factory(ctx, req.StorageUri, req.KmsUri)
|
||||
if err != nil {
|
||||
|
@ -124,7 +124,7 @@ func (s *RecoveryServer) Recover(ctx context.Context, req *recoverproto.RecoverM
|
|||
}
|
||||
s.stateDiskKey = stateDiskKey
|
||||
s.measurementSecret = measurementSecret
|
||||
log.Infof("Received state disk key and measurement secret, shutting down server")
|
||||
log.Info("Received state disk key and measurement secret, shutting down server")
|
||||
|
||||
go s.grpcServer.GracefulStop()
|
||||
return &recoverproto.RecoverResponse{}, nil
|
||||
|
@ -132,18 +132,18 @@ func (s *RecoveryServer) Recover(ctx context.Context, req *recoverproto.RecoverM
|
|||
|
||||
// StubServer implements the RecoveryServer interface but does not actually start a server.
|
||||
type StubServer struct {
|
||||
log *logger.Logger
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// NewStub returns a new stubbed RecoveryServer.
|
||||
// We use this to avoid having to start a server for worker nodes, since they don't require manual recovery.
|
||||
func NewStub(log *logger.Logger) *StubServer {
|
||||
func NewStub(log *slog.Logger) *StubServer {
|
||||
return &StubServer{log: log}
|
||||
}
|
||||
|
||||
// Serve waits until the context is canceled and returns nil.
|
||||
func (s *StubServer) Serve(ctx context.Context, _ net.Listener, _ string) ([]byte, []byte, error) {
|
||||
s.log.Infof("Running as worker node, skipping recovery server")
|
||||
s.log.Info("Running as worker node, skipping recovery server")
|
||||
<-ctx.Done()
|
||||
return nil, nil, ctx.Err()
|
||||
}
|
||||
|
|
|
@ -9,12 +9,10 @@ go_library(
|
|||
deps = [
|
||||
"//internal/cloud/metadata",
|
||||
"//internal/constants",
|
||||
"//internal/logger",
|
||||
"//internal/role",
|
||||
"//joinservice/joinproto",
|
||||
"@io_k8s_utils//clock",
|
||||
"@org_golang_google_grpc//:go_default_library",
|
||||
"@org_uber_go_zap//:zap",
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
@ -15,16 +15,15 @@ import (
|
|||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/edgelesssys/constellation/v2/internal/cloud/metadata"
|
||||
"github.com/edgelesssys/constellation/v2/internal/constants"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
"github.com/edgelesssys/constellation/v2/internal/role"
|
||||
"github.com/edgelesssys/constellation/v2/joinservice/joinproto"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
"k8s.io/utils/clock"
|
||||
)
|
||||
|
@ -47,12 +46,12 @@ type RejoinClient struct {
|
|||
dialer grpcDialer
|
||||
metadataAPI metadataAPI
|
||||
|
||||
log *logger.Logger
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
// New returns a new RejoinClient.
|
||||
func New(dial grpcDialer, nodeInfo metadata.InstanceMetadata,
|
||||
meta metadataAPI, log *logger.Logger,
|
||||
meta metadataAPI, log *slog.Logger,
|
||||
) *RejoinClient {
|
||||
return &RejoinClient{
|
||||
nodeInfo: nodeInfo,
|
||||
|
@ -70,22 +69,22 @@ func New(dial grpcDialer, nodeInfo metadata.InstanceMetadata,
|
|||
// from the metadata API and send rejoin requests to them.
|
||||
// The function returns after a successful rejoin request has been performed.
|
||||
func (c *RejoinClient) Start(ctx context.Context, diskUUID string) (diskKey, measurementSecret []byte) {
|
||||
c.log.Infof("Starting RejoinClient")
|
||||
c.log.Info("Starting RejoinClient")
|
||||
c.diskUUID = diskUUID
|
||||
ticker := c.clock.NewTicker(c.interval)
|
||||
|
||||
defer ticker.Stop()
|
||||
defer c.log.Infof("RejoinClient stopped")
|
||||
defer c.log.Info("RejoinClient stopped")
|
||||
|
||||
for {
|
||||
endpoints, err := c.getJoinEndpoints()
|
||||
if err != nil {
|
||||
c.log.With(zap.Error(err)).Errorf("Failed to get control-plane endpoints")
|
||||
c.log.With(slog.Any("error", err)).Error("Failed to get control-plane endpoints")
|
||||
} else {
|
||||
c.log.With(zap.Strings("endpoints", endpoints)).Infof("Received list with JoinService endpoints")
|
||||
c.log.With(slog.Any("endpoints", endpoints)).Info("Received list with JoinService endpoints")
|
||||
diskKey, measurementSecret, err = c.tryRejoinWithAvailableServices(ctx, endpoints)
|
||||
if err == nil {
|
||||
c.log.Infof("Successfully retrieved rejoin ticket")
|
||||
c.log.Info("Successfully retrieved rejoin ticket")
|
||||
return diskKey, measurementSecret
|
||||
}
|
||||
}
|
||||
|
@ -101,12 +100,12 @@ func (c *RejoinClient) Start(ctx context.Context, diskUUID string) (diskKey, mea
|
|||
// tryRejoinWithAvailableServices tries sending rejoin requests to the available endpoints.
|
||||
func (c *RejoinClient) tryRejoinWithAvailableServices(ctx context.Context, endpoints []string) (diskKey, measurementSecret []byte, err error) {
|
||||
for _, endpoint := range endpoints {
|
||||
c.log.With(zap.String("endpoint", endpoint)).Infof("Requesting rejoin ticket")
|
||||
c.log.With(slog.String("endpoint", endpoint)).Info("Requesting rejoin ticket")
|
||||
rejoinTicket, err := c.requestRejoinTicket(endpoint)
|
||||
if err == nil {
|
||||
return rejoinTicket.StateDiskKey, rejoinTicket.MeasurementSecret, nil
|
||||
}
|
||||
c.log.With(zap.Error(err), zap.String("endpoint", endpoint)).Warnf("Failed to rejoin on endpoint")
|
||||
c.log.With(slog.Any("error", err), slog.String("endpoint", endpoint)).Warn("Failed to rejoin on endpoint")
|
||||
|
||||
// stop requesting additional endpoints if the context is done
|
||||
select {
|
||||
|
@ -115,7 +114,7 @@ func (c *RejoinClient) tryRejoinWithAvailableServices(ctx context.Context, endpo
|
|||
default:
|
||||
}
|
||||
}
|
||||
c.log.Errorf("Failed to rejoin on all endpoints")
|
||||
c.log.Error("Failed to rejoin on all endpoints")
|
||||
return nil, nil, errors.New("failed to join on all endpoints")
|
||||
}
|
||||
|
||||
|
|
|
@ -20,10 +20,8 @@ go_library(
|
|||
"//internal/constants",
|
||||
"//internal/crypto",
|
||||
"//internal/file",
|
||||
"//internal/logger",
|
||||
"//internal/nodestate",
|
||||
"@com_github_spf13_afero//:afero",
|
||||
"@org_uber_go_zap//:zap",
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -31,10 +32,8 @@ import (
|
|||
"github.com/edgelesssys/constellation/v2/internal/constants"
|
||||
"github.com/edgelesssys/constellation/v2/internal/crypto"
|
||||
"github.com/edgelesssys/constellation/v2/internal/file"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
"github.com/edgelesssys/constellation/v2/internal/nodestate"
|
||||
"github.com/spf13/afero"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -49,7 +48,7 @@ const (
|
|||
|
||||
// Manager handles formatting, mapping, mounting and unmounting of state disks.
|
||||
type Manager struct {
|
||||
log *logger.Logger
|
||||
log *slog.Logger
|
||||
csp string
|
||||
diskPath string
|
||||
fs afero.Afero
|
||||
|
@ -60,7 +59,7 @@ type Manager struct {
|
|||
}
|
||||
|
||||
// New initializes a SetupManager with the given parameters.
|
||||
func New(log *logger.Logger, csp string, diskPath string, fs afero.Afero,
|
||||
func New(log *slog.Logger, csp string, diskPath string, fs afero.Afero,
|
||||
mapper DeviceMapper, mounter Mounter, openDevice vtpm.TPMOpenFunc,
|
||||
) *Manager {
|
||||
return &Manager{
|
||||
|
@ -82,7 +81,7 @@ func (s *Manager) PrepareExistingDisk(recover RecoveryDoer) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.log.With(zap.String("uuid", uuid)).Infof("Preparing existing state disk")
|
||||
s.log.With(slog.String("uuid", uuid)).Info("Preparing existing state disk")
|
||||
endpoint := net.JoinHostPort("0.0.0.0", strconv.Itoa(constants.RecoveryPort))
|
||||
|
||||
passphrase, measurementSecret, err := recover.Do(uuid, endpoint)
|
||||
|
@ -128,7 +127,7 @@ func (s *Manager) PrepareExistingDisk(recover RecoveryDoer) error {
|
|||
// PrepareNewDisk prepares an instances state disk by formatting the disk as a LUKS device using a random passphrase.
|
||||
func (s *Manager) PrepareNewDisk() error {
|
||||
uuid, _ := s.mapper.DiskUUID()
|
||||
s.log.With(zap.String("uuid", uuid)).Infof("Preparing new state disk")
|
||||
s.log.With(slog.String("uuid", uuid)).Info("Preparing new state disk")
|
||||
|
||||
// generate and save temporary passphrase
|
||||
passphrase := make([]byte, crypto.RNGLengthDefault)
|
||||
|
@ -192,12 +191,12 @@ func (s *Manager) LogDevices() error {
|
|||
devices = append(devices, fileInfo)
|
||||
}
|
||||
|
||||
s.log.Infof("List of all available block devices and partitions:")
|
||||
s.log.Info("List of all available block devices and partitions:")
|
||||
for _, device := range devices {
|
||||
var stat syscall.Statfs_t
|
||||
dev := "/dev/" + device.Name()
|
||||
if err := syscall.Statfs(dev, &stat); err != nil {
|
||||
s.log.With(zap.Error(err)).Errorf("failed to statfs %s", dev)
|
||||
s.log.With(slog.Any("error", err)).Error(fmt.Sprintf("failed to statfs %s", dev))
|
||||
continue
|
||||
}
|
||||
|
||||
|
@ -206,7 +205,7 @@ func (s *Manager) LogDevices() error {
|
|||
free := stat.Bfree * uint64(stat.Bsize)
|
||||
avail := stat.Bavail * uint64(stat.Bsize)
|
||||
|
||||
s.log.Infof(
|
||||
s.log.Info(fmt.Sprintf(
|
||||
"Name: %-15s, Size: %-10d, Mode: %s, ModTime: %s, Size = %-10d, Free = %-10d, Available = %-10d\n",
|
||||
dev,
|
||||
device.Size(),
|
||||
|
@ -214,7 +213,7 @@ func (s *Manager) LogDevices() error {
|
|||
device.ModTime(),
|
||||
size,
|
||||
free,
|
||||
avail)
|
||||
avail))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ go_test(
|
|||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
"@org_uber_go_zap//zapcore",
|
||||
],
|
||||
"@io_bazel_rules_go//go/platform:linux": [
|
||||
"//disk-mapper/internal/diskencryption",
|
||||
|
@ -42,7 +41,6 @@ go_test(
|
|||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
"@org_uber_go_zap//zapcore",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
|
|
|
@ -10,13 +10,13 @@ package integration
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"math"
|
||||
"testing"
|
||||
|
||||
"github.com/edgelesssys/constellation/v2/disk-mapper/internal/diskencryption"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
"github.com/martinjungblut/go-cryptsetup"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
func BenchmarkMapper(b *testing.B) {
|
||||
|
@ -39,7 +39,7 @@ func BenchmarkMapper(b *testing.B) {
|
|||
}
|
||||
|
||||
passphrase := "benchmark"
|
||||
mapper, free, err := diskencryption.New(testPath, logger.New(logger.PlainLog, zapcore.InfoLevel))
|
||||
mapper, free, err := diskencryption.New(testPath, logger.NewTextLogger(slog.LevelInfo))
|
||||
if err != nil {
|
||||
b.Fatal("Failed to create mapper:", err)
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
|
@ -103,7 +104,7 @@ func TestMapper(t *testing.T) {
|
|||
require.NoError(setup(1), "failed to setup test disk")
|
||||
defer func() { require.NoError(teardown(), "failed to delete test disk") }()
|
||||
|
||||
mapper, free, err := diskencryption.New(devicePath, logger.NewTest(t))
|
||||
mapper, free, err := diskencryption.New(devicePath, logger.NewTextLogger(slog.LevelInfo))
|
||||
require.NoError(err, "failed to initialize crypt device")
|
||||
defer free()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue