@@ -2,7 +2,6 @@ package memcached
2
2
3
3
import (
4
4
"context"
5
- "log"
6
5
"reflect"
7
6
8
7
cachev1alpha1 "github.com/operator-framework/operator-sdk-samples/memcached-operator/pkg/apis/cache/v1alpha1"
@@ -20,9 +19,12 @@ import (
20
19
"sigs.k8s.io/controller-runtime/pkg/handler"
21
20
"sigs.k8s.io/controller-runtime/pkg/manager"
22
21
"sigs.k8s.io/controller-runtime/pkg/reconcile"
22
+ logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
23
23
"sigs.k8s.io/controller-runtime/pkg/source"
24
24
)
25
25
26
+ var log = logf .Log .WithName ("controller_memcached" )
27
+
26
28
// Add creates a new Memcached Controller and adds it to the Manager. The Manager will set fields on the Controller
27
29
// and Start it when the Manager is Started.
28
30
func Add (mgr manager.Manager ) error {
@@ -80,7 +82,8 @@ type ReconcileMemcached struct {
80
82
// The Controller will requeue the Request to be processed again if the returned error is non-nil or
81
83
// Result.Requeue is true, otherwise upon completion it will remove the work from the queue.
82
84
func (r * ReconcileMemcached ) Reconcile (request reconcile.Request ) (reconcile.Result , error ) {
83
- log .Printf ("Reconciling Memcached %s/%s\n " , request .Namespace , request .Name )
85
+ reqLogger := log .WithValues ("Request.Namespace" , request .Namespace , "Request.Name" , request .Name )
86
+ reqLogger .Info ("Reconciling Memcached." )
84
87
85
88
// Fetch the Memcached instance
86
89
memcached := & cachev1alpha1.Memcached {}
@@ -90,11 +93,11 @@ func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Res
90
93
// Request object not found, could have been deleted after reconcile request.
91
94
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
92
95
// Return and don't requeue
93
- log . Printf ("Memcached %s/%s not found. Ignoring since object must be deleted\n " , request . Namespace , request . Name )
96
+ reqLogger . Info ("Memcached resource not found. Ignoring since object must be deleted." )
94
97
return reconcile.Result {}, nil
95
98
}
96
99
// Error reading the object - requeue the request.
97
- log . Printf ( "Failed to get Memcached: %v" , err )
100
+ reqLogger . Error ( err , "Failed to get Memcached." )
98
101
return reconcile.Result {}, err
99
102
}
100
103
@@ -104,16 +107,16 @@ func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Res
104
107
if err != nil && errors .IsNotFound (err ) {
105
108
// Define a new deployment
106
109
dep := r .deploymentForMemcached (memcached )
107
- log . Printf ("Creating a new Deployment %s/%s \n " , dep .Namespace , dep .Name )
110
+ reqLogger . Info ("Creating a new Deployment." , "Deployment.Namespace" , dep .Namespace , "Deployment.Name" , dep .Name )
108
111
err = r .client .Create (context .TODO (), dep )
109
112
if err != nil {
110
- log . Printf ( "Failed to create new Deployment: %v \n " , err )
113
+ reqLogger . Error ( err , "Failed to create new Deployment." , "Deployment.Namespace" , dep . Namespace , "Deployment.Name" , dep . Name )
111
114
return reconcile.Result {}, err
112
115
}
113
116
// Deployment created successfully - return and requeue
114
117
return reconcile.Result {Requeue : true }, nil
115
118
} else if err != nil {
116
- log . Printf ( "Failed to get Deployment: %v \n " , err )
119
+ reqLogger . Error ( err , "Failed to get Deployment." )
117
120
return reconcile.Result {}, err
118
121
}
119
122
@@ -123,7 +126,7 @@ func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Res
123
126
found .Spec .Replicas = & size
124
127
err = r .client .Update (context .TODO (), found )
125
128
if err != nil {
126
- log . Printf ( "Failed to update Deployment: %v \n " , err )
129
+ reqLogger . Error ( err , "Failed to update Deployment." , "Deployment.Namespace" , found . Namespace , "Deployment.Name" , found . Name )
127
130
return reconcile.Result {}, err
128
131
}
129
132
// Spec updated - return and requeue
@@ -134,10 +137,23 @@ func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Res
134
137
// List the pods for this memcached's deployment
135
138
podList := & corev1.PodList {}
136
139
labelSelector := labels .SelectorFromSet (labelsForMemcached (memcached .Name ))
137
- listOps := & client.ListOptions {Namespace : memcached .Namespace , LabelSelector : labelSelector }
140
+ listOps := & client.ListOptions {
141
+ Namespace : memcached .Namespace ,
142
+ LabelSelector : labelSelector ,
143
+ // HACK: due to a fake client bug, ListOptions.Raw.TypeMeta must be
144
+ // explicitly populated for testing.
145
+ //
146
+ // See https://github.com/kubernetes-sigs/controller-runtime/issues/168
147
+ Raw : & metav1.ListOptions {
148
+ TypeMeta : metav1.TypeMeta {
149
+ Kind : "Memcached" ,
150
+ APIVersion : cachev1alpha1 .SchemeGroupVersion .Version ,
151
+ },
152
+ },
153
+ }
138
154
err = r .client .List (context .TODO (), listOps , podList )
139
155
if err != nil {
140
- log . Printf ( "Failed to list pods: %v" , err )
156
+ reqLogger . Error ( err , "Failed to list pods." , "Memcached.Namespace" , memcached . Namespace , "Memcached.Name" , memcached . Name )
141
157
return reconcile.Result {}, err
142
158
}
143
159
podNames := getPodNames (podList .Items )
@@ -147,7 +163,7 @@ func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Res
147
163
memcached .Status .Nodes = podNames
148
164
err := r .client .Update (context .TODO (), memcached )
149
165
if err != nil {
150
- log . Printf ( "failed to update memcached status: %v" , err )
166
+ reqLogger . Error ( err , "Failed to update Memcached status." )
151
167
return reconcile.Result {}, err
152
168
}
153
169
}
0 commit comments