Skip to content

Commit 0d92c51

Browse files
author
Jeff Peeler
committed
fix(util): fill in GVK info from InferGroupVersionKind
The owner comparison check was comparing against empty values before. This also adds some additional warnings just to be safe.
1 parent 4121c47 commit 0d92c51

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

pkg/controller/operators/olm/apiservices.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func (a *Operator) checkAPIServiceResources(csv *v1alpha1.ClusterServiceVersion,
8383
}
8484

8585
// Check if the APIService is adoptable
86-
if !ownerutil.OwnersIntersect(owners, apiService.GetLabels()) {
86+
if !ownerutil.OwnersIntersect(owners, apiService) {
8787
err := olmerrors.NewUnadoptableError("", apiServiceName)
8888
logger.WithError(err).Warn("found unadoptable apiservice")
8989
errs = append(errs, err)
@@ -695,7 +695,7 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
695695
owners = append(owners, replaces)
696696
}
697697
// check if the APIService is adoptable
698-
if !ownerutil.OwnersIntersect(owners, apiService.GetLabels()) {
698+
if !ownerutil.OwnersIntersect(owners, apiService) {
699699
return nil, fmt.Errorf("pre-existing APIService %s is not adoptable", apiServiceName)
700700
}
701701
}

pkg/lib/ownerutil/util.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"k8s.io/apimachinery/pkg/labels"
1414
"k8s.io/apimachinery/pkg/runtime"
1515
"k8s.io/apimachinery/pkg/runtime/schema"
16+
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
1617
)
1718

1819
const (
@@ -125,16 +126,38 @@ func Adoptable(target Owner, owners []metav1.OwnerReference) bool {
125126
}
126127

127128
// OwnersIntersect checks to see if any member of targets exists in owners
128-
func OwnersIntersect(targets []Owner, ownerLabels map[string]string) bool {
129+
func OwnersIntersect(targets []Owner, apiservice *apiregistrationv1.APIService) bool {
130+
ownerLabels := apiservice.GetLabels()
129131
if len(ownerLabels) == 0 {
130132
// Resources with no owners are not adoptable
133+
log.Debugf("Did not contain labels for apiservice %v", apiservice.GetName())
134+
return false
135+
}
136+
137+
svcOwnerKind, ok := ownerLabels[OwnerKind]
138+
if !ok {
139+
log.Warnf("missing owner kind for apiservice %v", apiservice.GetName())
140+
return false
141+
}
142+
svcOwnerNamespace, ok := ownerLabels[OwnerNamespaceKey]
143+
if !ok {
144+
log.Warnf("missing owner namespace for apiservice %v", apiservice.GetName())
145+
return false
146+
}
147+
svcOwnerName, ok := ownerLabels[OwnerKey]
148+
if !ok {
149+
log.Warnf("missing owner name for apiservice %v", apiservice.GetName())
131150
return false
132151
}
133152

134153
for _, target := range targets {
135-
if ownerLabels[OwnerKind] == target.GetObjectKind().GroupVersionKind().Kind &&
136-
ownerLabels[OwnerNamespaceKey] == target.GetNamespace() &&
137-
ownerLabels[OwnerKey] == target.GetName() {
154+
if err := InferGroupVersionKind(target); err != nil {
155+
log.Warnf("GVK infer failed for %v: %v", target, err)
156+
return false
157+
}
158+
if svcOwnerKind == target.GetObjectKind().GroupVersionKind().Kind &&
159+
svcOwnerNamespace == target.GetNamespace() &&
160+
svcOwnerName == target.GetName() {
138161
return true
139162
}
140163
}

0 commit comments

Comments
 (0)