@@ -9,8 +9,10 @@ import (
9
9
apierrs "k8s.io/apimachinery/pkg/api/errors"
10
10
"k8s.io/apimachinery/pkg/types"
11
11
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
12
+ coreinformers "k8s.io/client-go/informers/core/v1"
12
13
"k8s.io/client-go/kubernetes"
13
14
corelisters "k8s.io/client-go/listers/core/v1"
15
+ "k8s.io/client-go/tools/cache"
14
16
"k8s.io/client-go/tools/record"
15
17
"k8s.io/client-go/util/retry"
16
18
@@ -148,3 +150,68 @@ func (rpc *realPVControl) recordPVEvent(verb string, tc *v1alpha1.Redis, pvName
148
150
}
149
151
150
152
var _ PVControlInterface = & realPVControl {}
153
+
154
+ // FakePVControl is a fake PVControlInterface
155
+ type FakePVControl struct {
156
+ PVCLister corelisters.PersistentVolumeClaimLister
157
+ PVIndexer cache.Indexer
158
+ updatePVTracker requestTracker
159
+ }
160
+
161
+ // NewFakePVControl returns a FakePVControl
162
+ func NewFakePVControl (pvInformer coreinformers.PersistentVolumeInformer , pvcInformer coreinformers.PersistentVolumeClaimInformer ) * FakePVControl {
163
+ return & FakePVControl {
164
+ pvcInformer .Lister (),
165
+ pvInformer .Informer ().GetIndexer (),
166
+ requestTracker {0 , nil , 0 },
167
+ }
168
+ }
169
+
170
+ // SetUpdatePVError sets the error attributes of updatePVTracker
171
+ func (fpc * FakePVControl ) SetUpdatePVError (err error , after int ) {
172
+ fpc .updatePVTracker .err = err
173
+ fpc .updatePVTracker .after = after
174
+ }
175
+
176
+ // PatchPVReclaimPolicy patchs the reclaim policy of PV
177
+ func (fpc * FakePVControl ) PatchPVReclaimPolicy (_ * v1alpha1.Redis , pv * corev1.PersistentVolume , reclaimPolicy corev1.PersistentVolumeReclaimPolicy ) error {
178
+ defer fpc .updatePVTracker .inc ()
179
+ if fpc .updatePVTracker .errorReady () {
180
+ defer fpc .updatePVTracker .reset ()
181
+ return fpc .updatePVTracker .err
182
+ }
183
+ pv .Spec .PersistentVolumeReclaimPolicy = reclaimPolicy
184
+
185
+ return fpc .PVIndexer .Update (pv )
186
+ }
187
+
188
+ // UpdatePV update a pv in a Redis.
189
+ func (fpc * FakePVControl ) UpdatePV (rc * v1alpha1.Redis , pv * corev1.PersistentVolume ) (* corev1.PersistentVolume , error ) {
190
+ ns := rc .GetNamespace ()
191
+ if pv .Labels == nil {
192
+ pv .Labels = make (map [string ]string )
193
+ }
194
+ if pv .Annotations == nil {
195
+ pv .Annotations = make (map [string ]string )
196
+ }
197
+
198
+ pvcName := pv .Spec .ClaimRef .Name
199
+ pvc , err := fpc .PVCLister .PersistentVolumeClaims (ns ).Get (pvcName )
200
+ if err != nil {
201
+ return nil , err
202
+ }
203
+
204
+ component := pvc .Labels [label .ComponentLabelKey ]
205
+ podName := pvc .Annotations [label .AnnPodNameKey ]
206
+ pv .Labels [label .NamespaceLabelKey ] = ns
207
+ pv .Labels [label .ComponentLabelKey ] = component
208
+ pv .Labels [label .NameLabelKey ] = pvc .Labels [label .NameLabelKey ]
209
+ pv .Labels [label .ManagedByLabelKey ] = pvc .Labels [label .ManagedByLabelKey ]
210
+ pv .Labels [label .InstanceLabelKey ] = pvc .Labels [label .InstanceLabelKey ]
211
+
212
+ setIfNotEmpty (pv .Annotations , label .AnnPodNameKey , podName )
213
+
214
+ return pv , fpc .PVIndexer .Update (pv )
215
+ }
216
+
217
+ var _ PVControlInterface = & FakePVControl {}
0 commit comments