@@ -24,6 +24,8 @@ import (
24
24
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
25
25
"k8s.io/client-go/informers"
26
26
k8sscheme "k8s.io/client-go/kubernetes/scheme"
27
+ "k8s.io/client-go/metadata/metadatainformer"
28
+ "k8s.io/client-go/metadata/metadatalister"
27
29
"k8s.io/client-go/tools/cache"
28
30
"k8s.io/client-go/tools/record"
29
31
"k8s.io/client-go/util/workqueue"
@@ -35,12 +37,10 @@ import (
35
37
"github.com/operator-framework/api/pkg/operators/v1alpha1"
36
38
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
37
39
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/informers/externalversions"
38
- operatorsv1alpha1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
39
40
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/certs"
40
41
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
41
- "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/internal/pruning"
42
42
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm/overrides"
43
- resolver "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver"
43
+ "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver"
44
44
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/clients"
45
45
csvutility "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/csv"
46
46
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/event"
@@ -75,7 +75,7 @@ type Operator struct {
75
75
client versioned.Interface
76
76
lister operatorlister.OperatorLister
77
77
protectedCopiedCSVNamespaces map [string ]struct {}
78
- copiedCSVLister operatorsv1alpha1listers. ClusterServiceVersionLister
78
+ copiedCSVLister metadatalister. Lister
79
79
ogQueueSet * queueinformer.ResourceQueueSet
80
80
csvQueueSet * queueinformer.ResourceQueueSet
81
81
olmConfigQueue workqueue.RateLimitingInterface
@@ -211,51 +211,28 @@ func newOperatorWithConfig(ctx context.Context, config *operatorConfig) (*Operat
211
211
// A separate informer solely for CSV copies. Fields
212
212
// are pruned from local copies of the objects managed
213
213
// by this informer in order to reduce cached size.
214
- copiedCSVInformer := cache .NewSharedIndexInformer (
215
- pruning .NewListerWatcher (
216
- op .client ,
217
- namespace ,
218
- func (opts * metav1.ListOptions ) {
219
- opts .LabelSelector = v1alpha1 .CopiedLabelKey
220
- },
221
- pruning .PrunerFunc (func (csv * v1alpha1.ClusterServiceVersion ) {
222
- nonstatus , status := copyableCSVHash (csv )
223
- * csv = v1alpha1.ClusterServiceVersion {
224
- TypeMeta : csv .TypeMeta ,
225
- ObjectMeta : csv .ObjectMeta ,
226
- Status : v1alpha1.ClusterServiceVersionStatus {
227
- Phase : csv .Status .Phase ,
228
- Reason : csv .Status .Reason ,
229
- },
230
- }
231
- if csv .Annotations == nil {
232
- csv .Annotations = make (map [string ]string , 2 )
233
- }
234
- // These annotation keys are
235
- // intentionally invalid -- all writes
236
- // to copied CSVs are regenerated from
237
- // the corresponding non-copied CSV,
238
- // so it should never be transmitted
239
- // back to the API server.
240
- csv .Annotations ["$copyhash-nonstatus" ] = nonstatus
241
- csv .Annotations ["$copyhash-status" ] = status
242
- }),
243
- ),
244
- & v1alpha1.ClusterServiceVersion {},
214
+ gvr := v1alpha1 .SchemeGroupVersion .WithResource ("clusterserviceversions" )
215
+ copiedCSVInformer := metadatainformer .NewFilteredMetadataInformer (
216
+ config .metadataClient ,
217
+ gvr ,
218
+ namespace ,
245
219
config .resyncPeriod (),
246
220
cache.Indexers {cache .NamespaceIndex : cache .MetaNamespaceIndexFunc },
221
+ func (options * metav1.ListOptions ) {
222
+ options .LabelSelector = v1alpha1 .CopiedLabelKey
223
+ },
247
224
)
248
- op .copiedCSVLister = operatorsv1alpha1listers . NewClusterServiceVersionLister (copiedCSVInformer .GetIndexer ())
225
+ op .copiedCSVLister = metadatalister . New (copiedCSVInformer .Informer (). GetIndexer (), gvr )
249
226
250
227
// Register separate queue for gcing copied csvs
251
228
copiedCSVGCQueue := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), fmt .Sprintf ("%s/csv-gc" , namespace ))
252
229
op .copiedCSVGCQueueSet .Set (namespace , copiedCSVGCQueue )
253
230
copiedCSVGCQueueInformer , err := queueinformer .NewQueueInformer (
254
231
ctx ,
255
- queueinformer .WithInformer (copiedCSVInformer ),
232
+ queueinformer .WithInformer (copiedCSVInformer . Informer () ),
256
233
queueinformer .WithLogger (op .logger ),
257
234
queueinformer .WithQueue (copiedCSVGCQueue ),
258
- queueinformer .WithIndexer (copiedCSVInformer .GetIndexer ()),
235
+ queueinformer .WithIndexer (copiedCSVInformer .Informer (). GetIndexer ()),
259
236
queueinformer .WithSyncer (queueinformer .LegacySyncHandler (op .syncGcCsv ).ToSyncer ()),
260
237
)
261
238
if err != nil {
@@ -1195,17 +1172,16 @@ func (a *Operator) handleClusterServiceVersionDeletion(obj interface{}) {
1195
1172
}
1196
1173
}
1197
1174
1198
- func (a * Operator ) removeDanglingChildCSVs (csv * v1alpha1. ClusterServiceVersion ) error {
1175
+ func (a * Operator ) removeDanglingChildCSVs (csv * metav1. PartialObjectMetadata ) error {
1199
1176
logger := a .logger .WithFields (logrus.Fields {
1200
1177
"id" : queueinformer .NewLoopID (),
1201
1178
"csv" : csv .GetName (),
1202
1179
"namespace" : csv .GetNamespace (),
1203
- "phase" : csv .Status .Phase ,
1204
1180
"labels" : csv .GetLabels (),
1205
1181
"annotations" : csv .GetAnnotations (),
1206
1182
})
1207
1183
1208
- if ! csv . IsCopied () {
1184
+ if ! IsCopied (csv ) {
1209
1185
logger .Warning ("removeDanglingChild called on a parent. this is a no-op but should be avoided." )
1210
1186
return nil
1211
1187
}
@@ -1244,7 +1220,7 @@ func (a *Operator) removeDanglingChildCSVs(csv *v1alpha1.ClusterServiceVersion)
1244
1220
return nil
1245
1221
}
1246
1222
1247
- func (a * Operator ) deleteChild (csv * v1alpha1. ClusterServiceVersion , logger * logrus.Entry ) error {
1223
+ func (a * Operator ) deleteChild (csv * metav1. PartialObjectMetadata , logger * logrus.Entry ) error {
1248
1224
logger .Debug ("gcing csv" )
1249
1225
return a .client .OperatorsV1alpha1 ().ClusterServiceVersions (csv .GetNamespace ()).Delete (context .TODO (), csv .GetName (), metav1.DeleteOptions {})
1250
1226
}
@@ -1683,18 +1659,23 @@ func (a *Operator) createCSVCopyingDisabledEvent(csv *v1alpha1.ClusterServiceVer
1683
1659
}
1684
1660
1685
1661
func (a * Operator ) syncGcCsv (obj interface {}) (syncError error ) {
1686
- clusterServiceVersion , ok := obj .(* v1alpha1. ClusterServiceVersion )
1662
+ clusterServiceVersion , ok := obj .(* metav1. PartialObjectMetadata )
1687
1663
if ! ok {
1688
1664
a .logger .Debugf ("wrong type: %#v" , obj )
1689
1665
return fmt .Errorf ("casting ClusterServiceVersion failed" )
1690
1666
}
1691
- if clusterServiceVersion . IsCopied () {
1667
+ if IsCopied (clusterServiceVersion ) {
1692
1668
syncError = a .removeDanglingChildCSVs (clusterServiceVersion )
1693
1669
return
1694
1670
}
1695
1671
return
1696
1672
}
1697
1673
1674
+ func IsCopied (o metav1.Object ) bool {
1675
+ _ , ok := o .GetLabels ()[v1alpha1 .CopiedLabelKey ]
1676
+ return ok
1677
+ }
1678
+
1698
1679
// operatorGroupFromAnnotations returns the OperatorGroup for the CSV only if the CSV is active one in the group
1699
1680
func (a * Operator ) operatorGroupFromAnnotations (logger * logrus.Entry , csv * v1alpha1.ClusterServiceVersion ) * operatorsv1.OperatorGroup {
1700
1681
annotations := csv .GetAnnotations ()
0 commit comments