Skip to content

Commit

Permalink
pkg/client: skip owner reference injection when helm keep annotation …
Browse files Browse the repository at this point in the history
…is present
  • Loading branch information
joelanford committed Jan 15, 2021
1 parent 7cad81a commit 71cf6e6
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
15 changes: 14 additions & 1 deletion pkg/client/actionclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"encoding/json"
"errors"
"fmt"
"strings"

sdkhandler "github.com/operator-framework/operator-lib/handler"
"gomodules.xyz/jsonpatch/v2"
Expand Down Expand Up @@ -325,7 +326,7 @@ func (pr *ownerPostRenderer) Run(in *bytes.Buffer) (*bytes.Buffer, error) {
if err != nil {
return err
}
if useOwnerRef {
if useOwnerRef && !containsResourcePolicyKeep(u.GetAnnotations()) {
ownerRef := metav1.NewControllerRef(pr.owner, pr.owner.GetObjectKind().GroupVersionKind())
ownerRefs := append(u.GetOwnerReferences(), *ownerRef)
u.SetOwnerReferences(ownerRefs)
Expand All @@ -348,3 +349,15 @@ func (pr *ownerPostRenderer) Run(in *bytes.Buffer) (*bytes.Buffer, error) {
}
return &out, nil
}

func containsResourcePolicyKeep(annotations map[string]string) bool {
if annotations == nil {
return false
}
resourcePolicyType, ok := annotations[kube.ResourcePolicyAnno]
if !ok {
return false
}
resourcePolicyType = strings.ToLower(strings.TrimSpace(resourcePolicyType))
return resourcePolicyType == kube.KeepPolicy
}
28 changes: 28 additions & 0 deletions pkg/client/actionclient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"context"
"errors"
"strconv"
"strings"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -543,6 +544,33 @@ var _ = Describe("ActionClient", func() {
Expect(err).NotTo(BeNil())
})
})

var _ = Describe("containsResourcePolicyKeep", func() {
It("returns true on base case", func() {
annotations := map[string]string{kube.ResourcePolicyAnno: kube.KeepPolicy}
Expect(containsResourcePolicyKeep(annotations)).To(BeTrue())
})
It("returns false when annotation key is not found", func() {
annotations := map[string]string{"not-" + kube.ResourcePolicyAnno: kube.KeepPolicy}
Expect(containsResourcePolicyKeep(annotations)).To(BeFalse())
})
It("returns false when annotation value is not 'keep'", func() {
annotations := map[string]string{"not-" + kube.ResourcePolicyAnno: "not-" + kube.KeepPolicy}
Expect(containsResourcePolicyKeep(annotations)).To(BeFalse())
})
It("returns true when annotation is uppercase", func() {
annotations := map[string]string{kube.ResourcePolicyAnno: strings.ToUpper(kube.KeepPolicy)}
Expect(containsResourcePolicyKeep(annotations)).To(BeTrue())
})
It("returns true when annotation is has whitespace prefix and/or suffix", func() {
annotations := map[string]string{kube.ResourcePolicyAnno: " " + kube.KeepPolicy + " "}
Expect(containsResourcePolicyKeep(annotations)).To(BeTrue())
})
It("returns true when annotation is uppercase and has whitespace prefix and/or suffix", func() {
annotations := map[string]string{kube.ResourcePolicyAnno: " " + strings.ToUpper(kube.KeepPolicy) + " "}
Expect(containsResourcePolicyKeep(annotations)).To(BeTrue())
})
})
})

func manifestToObjects(manifest string) []client.Object {
Expand Down

0 comments on commit 71cf6e6

Please sign in to comment.