Skip to content

Commit 9701f8e

Browse files
committed
Replace logging framework
1 parent ad10819 commit 9701f8e

18 files changed

Lines changed: 239 additions & 212 deletions

‎cmd/backup-agent/main.go‎

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,19 @@ import (
88
"path/filepath"
99
"time"
1010

11-
"github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
1211
rcon "github.com/katnegermis/pocketmine-rcon"
13-
uberzap "go.uber.org/zap"
12+
"go.uber.org/zap"
1413
"k8s.io/apimachinery/pkg/runtime/schema"
1514
"k8s.io/apimachinery/pkg/runtime/serializer"
1615
"k8s.io/client-go/kubernetes/scheme"
1716
"k8s.io/client-go/rest"
17+
18+
"github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
1819
)
1920

2021
func main() {
21-
logger, err := uberzap.NewProduction()
22-
defer logger.Sync()
22+
log, err := zap.NewProduction()
23+
defer log.Sync()
2324

2425
serverObjectName := os.Getenv("SERVER_OBJECT_NAME")
2526
serverObjectNamespace := os.Getenv("SERVER_OBJECT_NAME")
@@ -28,18 +29,18 @@ func main() {
2829
backupSourceDIR := os.Getenv("BACKUP_SOURCE_DIR")
2930
backupDestPath := os.Getenv("BACKUP_DEST_PATH")
3031

31-
logger.With(uberzap.String("server-object-name", serverObjectName),
32-
uberzap.String("server-object-namespace", serverObjectNamespace),
33-
uberzap.String("backup-name", backupName),
34-
uberzap.String("rcon-address", rconAddress),
35-
uberzap.String("backup-source-dir", backupSourceDIR),
36-
uberzap.String("backup-dest-path", backupDestPath)).Info("Starting backup")
32+
log.With(zap.String("server-object-name", serverObjectName),
33+
zap.String("server-object-namespace", serverObjectNamespace),
34+
zap.String("backup-name", backupName),
35+
zap.String("rcon-address", rconAddress),
36+
zap.String("backup-source-dir", backupSourceDIR),
37+
zap.String("backup-dest-path", backupDestPath)).Info("Starting backup")
3738

3839
config, err := rest.InClusterConfig()
3940
if err != nil {
40-
logger.With(uberzap.Error(err)).Panic("Failed to get in-cluster config")
41+
log.With(zap.Error(err)).Panic("Failed to get in-cluster config")
4142
}
42-
logger.Info("Acquired in-cluster Kube connection")
43+
log.Info("Acquired in-cluster Kube connection")
4344

4445
v1alpha1.AddToScheme(scheme.Scheme)
4546

@@ -51,45 +52,45 @@ func main() {
5152

5253
restClient, err := rest.UnversionedRESTClientFor(&crdConfig)
5354
if err != nil {
54-
logger.With(uberzap.Error(err)).Panic("Failed to create REST Client")
55+
log.With(zap.Error(err)).Panic("Failed to create REST Client")
5556
}
5657

5758
ctx := context.Background()
5859

59-
logger.Info("Acquiring lease")
60+
log.Info("Acquiring lease")
6061
err = acquireLease(ctx, restClient, serverObjectName, serverObjectNamespace, backupName)
6162
if err != nil {
62-
logger.With(uberzap.Error(err)).Panic("Failed to acquire lease")
63+
log.With(zap.Error(err)).Panic("Failed to acquire lease")
6364
}
64-
logger.Info("Lease acquired")
65+
log.Info("Lease acquired")
6566

6667
// TODO make sure to time out after the lease expires!
6768

6869
// TODO Use a real password
6970
conn, err := rcon.NewConnection(rconAddress, "password")
7071
if err != nil {
71-
logger.With(uberzap.Error(err), uberzap.String("rcon-address", rconAddress)).Panic("Failed to connect to rcon")
72+
log.With(zap.Error(err), zap.String("rcon-address", rconAddress)).Panic("Failed to connect to rcon")
7273
}
7374
_, err = conn.SendCommand("save-off")
7475
if err != nil {
75-
logger.With(uberzap.Error(err), uberzap.String("rcon-address", rconAddress)).Panic("Failed to send save-off")
76+
log.With(zap.Error(err), zap.String("rcon-address", rconAddress)).Panic("Failed to send save-off")
7677
}
7778
_, err = conn.SendCommand("save-all")
7879
if err != nil {
79-
logger.With(uberzap.Error(err), uberzap.String("rcon-address", rconAddress)).Panic("Failed to send save-all")
80+
log.With(zap.Error(err), zap.String("rcon-address", rconAddress)).Panic("Failed to send save-all")
8081
}
8182

8283
file, err := os.Create(filepath.Join(backupDestPath, backupName+".zip"))
8384
if err != nil {
84-
logger.With(uberzap.Error(err), uberzap.String("backup-dest-path", backupDestPath)).Panic("Failed to create backup destination")
85+
log.With(zap.Error(err), zap.String("backup-dest-path", backupDestPath)).Panic("Failed to create backup destination")
8586
}
8687
defer file.Close()
8788

8889
w := zip.NewWriter(file)
8990
defer w.Close()
9091

9192
walker := func(path string, info os.FileInfo, err error) error {
92-
logger.With(uberzap.String("path", path)).Debug("Crawling path")
93+
log.With(zap.String("path", path)).Debug("Crawling path")
9394
if err != nil {
9495
return err
9596
}
@@ -116,12 +117,12 @@ func main() {
116117
}
117118
err = filepath.Walk(backupSourceDIR, walker)
118119
if err != nil {
119-
logger.With(uberzap.Error(err), uberzap.String("backup-dest-path", backupDestPath)).Panic("Failed to create backup")
120+
log.With(zap.Error(err), zap.String("backup-dest-path", backupDestPath)).Panic("Failed to create backup")
120121
}
121122

122123
_, err = conn.SendCommand("save-on")
123124
if err != nil {
124-
logger.With(uberzap.Error(err), uberzap.String("rcon-address", rconAddress)).Panic("Failed to send save-on")
125+
log.With(zap.Error(err), zap.String("rcon-address", rconAddress)).Panic("Failed to send save-on")
125126
}
126127

127128
// Done!

‎cmd/operator/main.go‎

Lines changed: 33 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,24 @@
11
package main
22

33
import (
4-
"flag"
5-
"os"
6-
7-
"github.com/jameslaverack/kubernetes-minecraft-operator/controller"
8-
9-
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
10-
// to ensure that exec-entrypoint and run can make use of them.
11-
_ "k8s.io/client-go/plugin/pkg/client/auth"
12-
13-
uberzap "go.uber.org/zap"
4+
"github.com/go-logr/zapr"
5+
flag "github.com/spf13/pflag"
6+
"github.com/spf13/viper"
7+
"go.uber.org/zap"
148
"k8s.io/apimachinery/pkg/runtime"
159
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1610
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
11+
_ "k8s.io/client-go/plugin/pkg/client/auth"
1712
ctrl "sigs.k8s.io/controller-runtime"
1813
"sigs.k8s.io/controller-runtime/pkg/healthz"
19-
"sigs.k8s.io/controller-runtime/pkg/log/zap"
2014

2115
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
16+
"github.com/jameslaverack/kubernetes-minecraft-operator/controller"
17+
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/logutil"
2218
)
2319

2420
var (
25-
scheme = runtime.NewScheme()
26-
setupLog = ctrl.Log.WithName("setup")
21+
scheme = runtime.NewScheme()
2722
)
2823

2924
func init() {
@@ -32,70 +27,58 @@ func init() {
3227
}
3328

3429
func main() {
35-
var metricsAddr string
36-
var enableLeaderElection bool
37-
var probeAddr string
38-
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
39-
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
40-
flag.BoolVar(&enableLeaderElection, "leader-elect", false,
41-
"Enable leader election for controller manager. "+
42-
"Enabling this will ensure there is only one active controller manager.")
43-
opts := zap.Options{
44-
Development: true,
45-
}
46-
opts.BindFlags(flag.CommandLine)
30+
// Flags and configuration management
31+
flag.String("metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
32+
flag.String("health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
33+
flag.Bool("leader-elect", false, "Enable leader election for controller manager. "+
34+
"Enabling this will ensure there is only one active controller manager.")
4735
flag.Parse()
36+
viper.BindPFlags(flag.CommandLine)
4837

49-
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
38+
// Logging
39+
log, err := zap.NewProduction()
40+
if err != nil {
41+
panic(err)
42+
}
43+
ctrl.SetLogger(zapr.NewLogger(log))
44+
defer log.Sync()
5045

46+
// Manager
5147
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
5248
Scheme: scheme,
53-
MetricsBindAddress: metricsAddr,
49+
MetricsBindAddress: viper.GetString("metrics-bind-address"),
5450
Port: 9443,
55-
HealthProbeBindAddress: probeAddr,
56-
LeaderElection: enableLeaderElection,
51+
HealthProbeBindAddress: viper.GetString("health-probe-bind-address"),
52+
LeaderElection: viper.GetBool("leader-elect"),
5753
LeaderElectionID: "95b821c2.jameslaverack.com",
5854
})
5955
if err != nil {
60-
setupLog.Error(err, "unable to start manager")
61-
os.Exit(1)
62-
}
63-
64-
logger, err := uberzap.NewProduction()
65-
if err != nil {
66-
setupLog.Error(err, "unable to start logging")
67-
os.Exit(1)
56+
log.With(zap.Error(err)).Fatal("Failed to start controller manager")
6857
}
69-
defer logger.Sync()
7058

7159
if err = (&controller.MinecraftServerReconciler{
7260
Client: mgr.GetClient(),
7361
Scheme: mgr.GetScheme(),
7462
}).SetupWithManager(mgr); err != nil {
75-
setupLog.Error(err, "unable to create controller", "controller", "MinecraftServer")
76-
os.Exit(1)
63+
log.With(zap.Error(err), zap.String("controller", "MinecraftServer")).Fatal("Failed to setup controller")
7764
}
7865

7966
if err = (&controller.MinecraftBackupReconciler{
8067
Client: mgr.GetClient(),
8168
Scheme: mgr.GetScheme(),
8269
}).SetupWithManager(mgr); err != nil {
83-
setupLog.Error(err, "unable to create backup controller", "controller", "MinecraftBackup")
84-
os.Exit(1)
70+
log.With(zap.Error(err), zap.String("controller", "MinecraftBackup")).Fatal("Failed to setup controller")
8571
}
8672

8773
if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
88-
setupLog.Error(err, "unable to set up health check")
89-
os.Exit(1)
74+
log.With(zap.Error(err)).Fatal("Failed to setup health check endpoint")
9075
}
9176
if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
92-
setupLog.Error(err, "unable to set up ready check")
93-
os.Exit(1)
77+
log.With(zap.Error(err)).Fatal("Failed to setup ready check endpoint")
9478
}
9579

96-
setupLog.Info("starting manager")
97-
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
98-
setupLog.Error(err, "problem running manager")
99-
os.Exit(1)
80+
log.Info("Starting manager")
81+
if err := mgr.Start(logutil.IntoContext(ctrl.SetupSignalHandler(), log)); err != nil {
82+
log.With(zap.Error(err)).Fatal("Failed to run manager")
10083
}
10184
}

‎controller/backup_controller.go‎

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@ package controller
33
import (
44
"context"
55

6+
"go.uber.org/zap"
67
batchv1 "k8s.io/api/batch/v1"
7-
8-
rbacv1 "k8s.io/api/rbac/v1"
9-
10-
"github.com/go-logr/logr"
11-
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
12-
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/reconcile"
138
corev1 "k8s.io/api/core/v1"
9+
rbacv1 "k8s.io/api/rbac/v1"
1410
"k8s.io/apimachinery/pkg/runtime"
1511
ctrl "sigs.k8s.io/controller-runtime"
1612
"sigs.k8s.io/controller-runtime/pkg/client"
17-
"sigs.k8s.io/controller-runtime/pkg/log"
13+
14+
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
15+
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/logutil"
16+
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/reconcile"
1817
)
1918

2019
// MinecraftServerReconciler reconciles a MinecraftServer object
@@ -24,15 +23,13 @@ type MinecraftBackupReconciler struct {
2423
}
2524

2625
func (r *MinecraftBackupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
27-
logger := log.Log.
28-
WithName("controller").
29-
WithName("minecraftbackup").
30-
WithValues(
31-
"name", req.Name,
32-
"namespace", req.Namespace)
26+
log := logutil.FromContextOrNew(ctx).With(
27+
zap.String("name", req.Name),
28+
zap.String("namespace", req.Namespace),
29+
zap.String("controller", "MinecraftServer"))
30+
ctx = logutil.IntoContext(ctx, log)
3331

34-
logger.Info("beginning reconciliation")
35-
ctx = logr.NewContext(ctx, logger)
32+
log.Info("beginning reconciliation")
3633

3734
var backup minecraftv1alpha1.MinecraftBackup
3835
if err := r.Get(ctx, req.NamespacedName, &backup); err != nil {
@@ -65,7 +62,7 @@ func (r *MinecraftBackupReconciler) Reconcile(ctx context.Context, req ctrl.Requ
6562
}
6663

6764
// All good, return
68-
logger.Info("All good")
65+
log.Info("All good")
6966
return ctrl.Result{}, nil
7067
}
7168

‎controller/controller.go‎

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ package controller
33
import (
44
"context"
55

6-
"github.com/go-logr/logr"
7-
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
8-
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/reconcile"
6+
"go.uber.org/zap"
97
appsv1 "k8s.io/api/apps/v1"
108
corev1 "k8s.io/api/core/v1"
119
"k8s.io/apimachinery/pkg/runtime"
1210
ctrl "sigs.k8s.io/controller-runtime"
1311
"sigs.k8s.io/controller-runtime/pkg/client"
14-
"sigs.k8s.io/controller-runtime/pkg/log"
12+
13+
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
14+
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/logutil"
15+
"github.com/jameslaverack/kubernetes-minecraft-operator/pkg/reconcile"
1516
)
1617

1718
// MinecraftServerReconciler reconciles a MinecraftServer object
@@ -21,15 +22,13 @@ type MinecraftServerReconciler struct {
2122
}
2223

2324
func (r *MinecraftServerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
24-
logger := log.Log.
25-
WithName("controller").
26-
WithName("minecraftserver").
27-
WithValues(
28-
"name", req.Name,
29-
"namespace", req.Namespace)
25+
log := logutil.FromContextOrNew(ctx).With(
26+
zap.String("name", req.Name),
27+
zap.String("namespace", req.Namespace),
28+
zap.String("controller", "MinecraftServer"))
29+
ctx = logutil.IntoContext(ctx, log)
3030

31-
logger.Info("beginning reconciliation")
32-
ctx = logr.NewContext(ctx, logger)
31+
log.Info("beginning reconciliation")
3332

3433
// Go back to the API server with a get to find the full definition of the MinecraftServer object (we're only given
3534
// the name and namespace at this point). We also might fail to find it, as we might have been triggered to
@@ -95,7 +94,7 @@ func (r *MinecraftServerReconciler) Reconcile(ctx context.Context, req ctrl.Requ
9594
}
9695

9796
// All good, return
98-
logger.Info("All good")
97+
log.Info("All good")
9998
return ctrl.Result{}, nil
10099
}
101100

‎controller/controller_test.go‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"testing"
88
"time"
99

10-
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
1110
"github.com/stretchr/testify/assert"
1211
"github.com/stretchr/testify/require"
1312
appsv1 "k8s.io/api/apps/v1"
@@ -19,6 +18,8 @@ import (
1918
"sigs.k8s.io/controller-runtime/pkg/envtest"
2019
logf "sigs.k8s.io/controller-runtime/pkg/log"
2120
"sigs.k8s.io/controller-runtime/pkg/log/zap"
21+
22+
minecraftv1alpha1 "github.com/jameslaverack/kubernetes-minecraft-operator/api/v1alpha1"
2223
)
2324

2425
func setupTestingEnvironment(ctx context.Context, t *testing.T) (client.WithWatch, func()) {

0 commit comments

Comments
 (0)