@@ -126,11 +126,11 @@ func (w SyncWorkerStatus) DeepCopy() *SyncWorkerStatus {
126
126
// syncOnce() returns nil -> Reconciling
127
127
//
128
128
type SyncWorker struct {
129
- backoff wait.Backoff
130
- retriever PayloadRetriever
131
- builder payload.ResourceBuilder
132
- preconditions precondition.List
133
- reconciling bool
129
+ backoff wait.Backoff
130
+ retriever PayloadRetriever
131
+ builder payload.ResourceBuilder
132
+ preconditions precondition.List
133
+ reconciling bool
134
134
135
135
// minimumReconcileInterval is the minimum time between reconcile attempts, and is
136
136
// used to define the maximum backoff interval when syncOnce() returns an error.
@@ -148,11 +148,16 @@ type SyncWorker struct {
148
148
149
149
// updated by the run method only
150
150
payload * payload.Update
151
+
152
+ // exclude is an identifier used to determine which
153
+ // manifests should be excluded based on an annotation
154
+ // of the form exclude.release.openshift.io/<identifier>=true
155
+ exclude string
151
156
}
152
157
153
158
// NewSyncWorker initializes a ConfigSyncWorker that will retrieve payloads to disk, apply them via builder
154
159
// to a server, and obey limits about how often to reconcile or retry on errors.
155
- func NewSyncWorker (retriever PayloadRetriever , builder payload.ResourceBuilder , reconcileInterval time.Duration , backoff wait.Backoff ) * SyncWorker {
160
+ func NewSyncWorker (retriever PayloadRetriever , builder payload.ResourceBuilder , reconcileInterval time.Duration , backoff wait.Backoff , exclude string ) * SyncWorker {
156
161
return & SyncWorker {
157
162
retriever : retriever ,
158
163
builder : builder ,
@@ -165,14 +170,16 @@ func NewSyncWorker(retriever PayloadRetriever, builder payload.ResourceBuilder,
165
170
// Status() or use the result of calling Update() instead because the channel can be out of date
166
171
// if the reader is not fast enough.
167
172
report : make (chan SyncWorkerStatus , 500 ),
173
+
174
+ exclude : exclude ,
168
175
}
169
176
}
170
177
171
178
// NewSyncWorkerWithPreconditions initializes a ConfigSyncWorker that will retrieve payloads to disk, apply them via builder
172
179
// to a server, and obey limits about how often to reconcile or retry on errors.
173
180
// It allows providing preconditions for loading payload.
174
- func NewSyncWorkerWithPreconditions (retriever PayloadRetriever , builder payload.ResourceBuilder , preconditions precondition.List , reconcileInterval time.Duration , backoff wait.Backoff ) * SyncWorker {
175
- worker := NewSyncWorker (retriever , builder , reconcileInterval , backoff )
181
+ func NewSyncWorkerWithPreconditions (retriever PayloadRetriever , builder payload.ResourceBuilder , preconditions precondition.List , reconcileInterval time.Duration , backoff wait.Backoff , exclude string ) * SyncWorker {
182
+ worker := NewSyncWorker (retriever , builder , reconcileInterval , backoff , exclude )
176
183
worker .preconditions = preconditions
177
184
return worker
178
185
}
@@ -614,7 +621,7 @@ func (w *SyncWorker) apply(ctx context.Context, payloadUpdate *payload.Update, w
614
621
klog .V (4 ).Infof ("Running sync for %s" , task )
615
622
klog .V (5 ).Infof ("Manifest: %s" , string (task .Manifest .Raw ))
616
623
617
- ov , ok := getOverrideForManifest (work .Overrides , task .Manifest )
624
+ ov , ok := getOverrideForManifest (work .Overrides , w . exclude , task .Manifest )
618
625
if ok && ov .Unmanaged {
619
626
klog .V (4 ).Infof ("Skipping %s as unmanaged" , task )
620
627
continue
@@ -906,7 +913,7 @@ func newMultipleError(errs []error) error {
906
913
}
907
914
908
915
// getOverrideForManifest returns the override and true when override exists for manifest.
909
- func getOverrideForManifest (overrides []configv1.ComponentOverride , manifest * lib.Manifest ) (configv1.ComponentOverride , bool ) {
916
+ func getOverrideForManifest (overrides []configv1.ComponentOverride , excludeIdentifier string , manifest * lib.Manifest ) (configv1.ComponentOverride , bool ) {
910
917
for idx , ov := range overrides {
911
918
kind , namespace , name := manifest .GVK .Kind , manifest .Object ().GetNamespace (), manifest .Object ().GetName ()
912
919
if ov .Kind == kind &&
@@ -915,6 +922,10 @@ func getOverrideForManifest(overrides []configv1.ComponentOverride, manifest *li
915
922
return overrides [idx ], true
916
923
}
917
924
}
925
+ excludeAnnotation := fmt .Sprintf ("exclude.release.openshift.io/%s" , excludeIdentifier )
926
+ if annotations := manifest .Object ().GetAnnotations (); annotations != nil && annotations [excludeAnnotation ] == "true" {
927
+ return configv1.ComponentOverride {Unmanaged : true }, true
928
+ }
918
929
return configv1.ComponentOverride {}, false
919
930
}
920
931
0 commit comments