Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion hack/cluster-version-util/task_graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func newTaskGraphCmd() *cobra.Command {

func runTaskGraphCmd(cmd *cobra.Command, args []string) error {
manifestDir := args[0]
release, err := payload.LoadUpdate(manifestDir, "")
release, err := payload.LoadUpdate(manifestDir, "", "")
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cvo/cvo.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ func (vcb *verifyClientBuilder) HTTPClient() (*http.Client, error) {
// controller that loads and applies content to the cluster. It returns an error if the payload appears to
// be in error rather than continuing.
func (optr *Operator) InitializeFromPayload(restConfig *rest.Config, burstRestConfig *rest.Config) error {
update, err := payload.LoadUpdate(optr.defaultPayloadDir(), optr.releaseImage)
update, err := payload.LoadUpdate(optr.defaultPayloadDir(), optr.releaseImage, optr.exclude)
if err != nil {
return fmt.Errorf("the local release contents are invalid - no current version can be determined from disk: %v", err)
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/cvo/cvo_scenarios_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ func setupCVOTest(payloadDir string) (*Operator, map[string]runtime.Object, *fak
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "cvo-loop-test"),
client: client,
cvLister: &clientCVLister{client: client},
exclude: "exclude-test",
}

dynamicScheme := runtime.NewScheme()
Expand All @@ -90,7 +91,7 @@ func setupCVOTest(payloadDir string) (*Operator, map[string]runtime.Object, *fak
wait.Backoff{
Steps: 1,
},
"",
"exclude-test",
)
o.configSync = worker

Expand Down
10 changes: 3 additions & 7 deletions pkg/cvo/sync_worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
return err
}

payloadUpdate, err := payload.LoadUpdate(info.Directory, update.Image)
payloadUpdate, err := payload.LoadUpdate(info.Directory, update.Image, w.exclude)
if err != nil {
reporter.Report(SyncWorkerStatus{
Generation: work.Generation,
Expand Down Expand Up @@ -653,7 +653,7 @@ func (w *SyncWorker) apply(ctx context.Context, payloadUpdate *payload.Update, w
klog.V(4).Infof("Running sync for %s", task)
klog.V(5).Infof("Manifest: %s", string(task.Manifest.Raw))

ov, ok := getOverrideForManifest(work.Overrides, w.exclude, task.Manifest)
ov, ok := getOverrideForManifest(work.Overrides, task.Manifest)
if ok && ov.Unmanaged {
klog.V(4).Infof("Skipping %s as unmanaged", task)
continue
Expand Down Expand Up @@ -945,7 +945,7 @@ func newMultipleError(errs []error) error {
}

// getOverrideForManifest returns the override and true when override exists for manifest.
func getOverrideForManifest(overrides []configv1.ComponentOverride, excludeIdentifier string, manifest *lib.Manifest) (configv1.ComponentOverride, bool) {
func getOverrideForManifest(overrides []configv1.ComponentOverride, manifest *lib.Manifest) (configv1.ComponentOverride, bool) {
for idx, ov := range overrides {
kind, namespace, name := manifest.GVK.Kind, manifest.Object().GetNamespace(), manifest.Object().GetName()
if ov.Kind == kind &&
Expand All @@ -954,10 +954,6 @@ func getOverrideForManifest(overrides []configv1.ComponentOverride, excludeIdent
return overrides[idx], true
}
}
excludeAnnotation := fmt.Sprintf("exclude.release.openshift.io/%s", excludeIdentifier)
if annotations := manifest.Object().GetAnnotations(); annotations != nil && annotations[excludeAnnotation] == "true" {
return configv1.ComponentOverride{Unmanaged: true}, true
}
return configv1.ComponentOverride{}, false
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
kind: Test
apiVersion: v1
metadata:
name: file-20-yml
annotations:
exclude.release.openshift.io/exclude-test: "true"
17 changes: 16 additions & 1 deletion pkg/payload/payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ type Update struct {
Manifests []lib.Manifest
}

func LoadUpdate(dir, releaseImage string) (*Update, error) {
func LoadUpdate(dir, releaseImage, excludeIdentifier string) (*Update, error) {
payload, tasks, err := loadUpdatePayloadMetadata(dir, releaseImage)
if err != nil {
return nil, err
Expand Down Expand Up @@ -154,6 +154,15 @@ func LoadUpdate(dir, releaseImage string) (*Update, error) {
errs = append(errs, errors.Wrapf(err, "error parsing %s", file.Name()))
continue
}
// Filter out manifests that should be excluded based on annotation
filteredMs := []lib.Manifest{}
for _, manifest := range ms {
if shouldExclude(excludeIdentifier, &manifest) {
continue
}
filteredMs = append(filteredMs, manifest)
}
ms = filteredMs
for i := range ms {
ms[i].OriginalFilename = filepath.Base(file.Name())
}
Expand All @@ -179,6 +188,12 @@ func LoadUpdate(dir, releaseImage string) (*Update, error) {
return payload, nil
}

func shouldExclude(excludeIdentifier string, manifest *lib.Manifest) bool {
excludeAnnotation := fmt.Sprintf("exclude.release.openshift.io/%s", excludeIdentifier)
annotations := manifest.Object().GetAnnotations()
return annotations != nil && annotations[excludeAnnotation] == "true"
}

// ValidateDirectory checks if a directory can be a candidate update by
// looking for known files. It returns an error if the directory cannot
// be an update.
Expand Down
2 changes: 1 addition & 1 deletion pkg/payload/payload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func Test_loadUpdatePayload(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := LoadUpdate(tt.args.dir, tt.args.releaseImage)
got, err := LoadUpdate(tt.args.dir, tt.args.releaseImage, "exclude-test")
if (err != nil) != tt.wantErr {
t.Errorf("loadUpdatePayload() error = %v, wantErr %v", err, tt.wantErr)
return
Expand Down
2 changes: 1 addition & 1 deletion pkg/payload/task_graph_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ func Test_TaskGraph_real(t *testing.T) {
if len(path) == 0 {
t.Skip("TEST_GRAPH_PATH unset")
}
p, err := LoadUpdate(path, "arbitrary/image:1")
p, err := LoadUpdate(path, "arbitrary/image:1", "")
if err != nil {
t.Fatal(err)
}
Expand Down