Skip to content

Commit 3818118

Browse files
Merge pull request #834 from openshift-bot/synchronize-upstream
NO-ISSUE: Synchronize From Upstream Repositories
2 parents 1fb6193 + 58aad50 commit 3818118

File tree

19 files changed

+179
-50
lines changed

19 files changed

+179
-50
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,11 @@ require (
232232
golang.org/x/mod v0.19.0 // indirect
233233
golang.org/x/net v0.27.0 // indirect
234234
golang.org/x/oauth2 v0.20.0 // indirect
235-
golang.org/x/sync v0.7.0 // indirect
235+
golang.org/x/sync v0.8.0 // indirect
236236
golang.org/x/sys v0.22.0 // indirect
237237
golang.org/x/term v0.22.0 // indirect
238238
golang.org/x/text v0.16.0 // indirect
239-
golang.org/x/time v0.5.0 // indirect
239+
golang.org/x/time v0.6.0 // indirect
240240
golang.org/x/tools v0.23.0 // indirect
241241
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
242242
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect

go.sum

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2528,8 +2528,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
25282528
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
25292529
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
25302530
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
2531-
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
2532-
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
2531+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
2532+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
25332533
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
25342534
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
25352535
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2679,8 +2679,9 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb
26792679
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
26802680
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
26812681
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
2682-
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
26832682
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
2683+
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
2684+
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
26842685
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
26852686
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
26862687
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

staging/operator-lifecycle-manager/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ require (
3535
github.com/spf13/pflag v1.0.5
3636
github.com/stretchr/testify v1.9.0
3737
golang.org/x/net v0.27.0
38-
golang.org/x/sync v0.7.0
39-
golang.org/x/time v0.5.0
38+
golang.org/x/sync v0.8.0
39+
golang.org/x/time v0.6.0
4040
google.golang.org/grpc v1.65.0
4141
gopkg.in/yaml.v2 v2.4.0
4242
k8s.io/api v0.30.3

staging/operator-lifecycle-manager/go.sum

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2233,8 +2233,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
22332233
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
22342234
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
22352235
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
2236-
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
2237-
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
2236+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
2237+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
22382238
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
22392239
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
22402240
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2372,8 +2372,9 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb
23722372
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
23732373
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
23742374
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
2375-
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
23762375
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
2376+
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
2377+
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
23772378
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
23782379
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
23792380
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

staging/operator-lifecycle-manager/pkg/controller/operators/catalog/operator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
214214
clientFactory: clients.NewFactory(validatingConfig),
215215
}
216216
op.sources = grpc.NewSourceStore(logger, 10*time.Second, 10*time.Minute, op.syncSourceState)
217-
op.sourceInvalidator = resolver.SourceProviderFromRegistryClientProvider(op.sources, logger)
217+
op.sourceInvalidator = resolver.SourceProviderFromRegistryClientProvider(op.sources, lister.OperatorsV1alpha1().CatalogSourceLister(), logger)
218218
resolverSourceProvider := NewOperatorGroupToggleSourceProvider(op.sourceInvalidator, logger, op.lister.OperatorsV1().OperatorGroupLister())
219219
op.reconciler = reconciler.NewRegistryReconcilerFactory(lister, opClient, configmapRegistryImage, op.now, ssaClient, workloadUserID, opmImage, utilImage)
220220
res := resolver.NewOperatorStepResolver(lister, crClient, operatorNamespace, resolverSourceProvider, logger)

staging/operator-lifecycle-manager/pkg/controller/operators/catalog/subscription/reconciler.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,16 @@ func (c *catalogHealthReconciler) Reconcile(ctx context.Context, in kubestate.St
9191

9292
var healthUpdated, deprecationUpdated bool
9393
next, healthUpdated = s.UpdateHealth(c.now(), catalogHealth...)
94+
if healthUpdated {
95+
if _, err := c.client.OperatorsV1alpha1().Subscriptions(ns).UpdateStatus(ctx, s.Subscription(), metav1.UpdateOptions{}); err != nil {
96+
return nil, err
97+
}
98+
}
9499
deprecationUpdated, err = c.updateDeprecatedStatus(ctx, s.Subscription())
95100
if err != nil {
96101
return next, err
97102
}
98-
if healthUpdated || deprecationUpdated {
103+
if deprecationUpdated {
99104
_, err = c.client.OperatorsV1alpha1().Subscriptions(ns).UpdateStatus(ctx, s.Subscription(), metav1.UpdateOptions{})
100105
}
101106
case SubscriptionExistsState:

staging/operator-lifecycle-manager/pkg/controller/registry/resolver/cache/cache.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func (c *NamespacedOperatorCache) Error() error {
139139
err := snapshot.err
140140
snapshot.m.RUnlock()
141141
if err != nil {
142-
errs = append(errs, fmt.Errorf("failed to populate resolver cache from source %v: %w", key.String(), err))
142+
errs = append(errs, fmt.Errorf("error using catalogsource %s/%s: %w", key.Namespace, key.Name, err))
143143
}
144144
}
145145
return errors.NewAggregate(errs)

staging/operator-lifecycle-manager/pkg/controller/registry/resolver/cache/cache_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,5 +238,5 @@ func TestNamespaceOperatorCacheError(t *testing.T) {
238238
key: ErrorSource{Error: errors.New("testing")},
239239
})
240240

241-
require.EqualError(t, c.Namespaced("dummynamespace").Error(), "failed to populate resolver cache from source dummyname/dummynamespace: testing")
241+
require.EqualError(t, c.Namespaced("dummynamespace").Error(), "error using catalogsource dummynamespace/dummyname: testing")
242242
}

staging/operator-lifecycle-manager/pkg/controller/registry/resolver/source_registry.go

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ import (
88
"time"
99

1010
"github.com/blang/semver/v4"
11+
operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
12+
v1alpha1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
1113
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry"
1214
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/cache"
1315
"github.com/operator-framework/operator-registry/pkg/api"
1416
"github.com/operator-framework/operator-registry/pkg/client"
1517
opregistry "github.com/operator-framework/operator-registry/pkg/registry"
1618
"github.com/sirupsen/logrus"
19+
"k8s.io/apimachinery/pkg/labels"
1720
)
1821

1922
// todo: move to pkg/controller/operators/catalog
@@ -65,31 +68,65 @@ func (i *sourceInvalidator) GetValidChannel(key cache.SourceKey) <-chan struct{}
6568
}
6669

6770
type RegistrySourceProvider struct {
68-
rcp RegistryClientProvider
69-
logger logrus.StdLogger
70-
invalidator *sourceInvalidator
71+
rcp RegistryClientProvider
72+
catsrcLister v1alpha1listers.CatalogSourceLister
73+
logger logrus.StdLogger
74+
invalidator *sourceInvalidator
7175
}
7276

73-
func SourceProviderFromRegistryClientProvider(rcp RegistryClientProvider, logger logrus.StdLogger) *RegistrySourceProvider {
77+
func SourceProviderFromRegistryClientProvider(rcp RegistryClientProvider, catsrcLister v1alpha1listers.CatalogSourceLister, logger logrus.StdLogger) *RegistrySourceProvider {
7478
return &RegistrySourceProvider{
75-
rcp: rcp,
76-
logger: logger,
79+
rcp: rcp,
80+
logger: logger,
81+
catsrcLister: catsrcLister,
7782
invalidator: &sourceInvalidator{
7883
validChans: make(map[cache.SourceKey]chan struct{}),
7984
ttl: 5 * time.Minute,
8085
},
8186
}
8287
}
8388

89+
type errorSource struct {
90+
error
91+
}
92+
93+
func (s errorSource) Snapshot(_ context.Context) (*cache.Snapshot, error) {
94+
return nil, s.error
95+
}
96+
8497
func (a *RegistrySourceProvider) Sources(namespaces ...string) map[cache.SourceKey]cache.Source {
8598
result := make(map[cache.SourceKey]cache.Source)
86-
for key, client := range a.rcp.ClientsForNamespaces(namespaces...) {
87-
result[cache.SourceKey(key)] = &registrySource{
88-
key: cache.SourceKey(key),
89-
client: client,
90-
logger: a.logger,
91-
invalidator: a.invalidator,
99+
100+
cats := []*operatorsv1alpha1.CatalogSource{}
101+
for _, ns := range namespaces {
102+
catsInNamespace, err := a.catsrcLister.CatalogSources(ns).List(labels.Everything())
103+
if err != nil {
104+
result[cache.SourceKey{Name: "", Namespace: ns}] = errorSource{
105+
error: fmt.Errorf("failed to list catalogsources for namespace %q: %w", ns, err),
106+
}
107+
return result
92108
}
109+
cats = append(cats, catsInNamespace...)
110+
}
111+
112+
clients := a.rcp.ClientsForNamespaces(namespaces...)
113+
for _, cat := range cats {
114+
key := cache.SourceKey{Name: cat.Name, Namespace: cat.Namespace}
115+
if client, ok := clients[registry.CatalogKey{Name: cat.Name, Namespace: cat.Namespace}]; ok {
116+
result[key] = &registrySource{
117+
key: key,
118+
client: client,
119+
logger: a.logger,
120+
invalidator: a.invalidator,
121+
}
122+
} else {
123+
result[key] = errorSource{
124+
error: fmt.Errorf("no registry client established for catalogsource %s/%s", cat.Namespace, cat.Name),
125+
}
126+
}
127+
}
128+
if len(result) == 0 {
129+
return nil
93130
}
94131
return result
95132
}

staging/operator-lifecycle-manager/pkg/controller/registry/resolver/step_resolver.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/operator-framework/api/pkg/operators/v1alpha1"
99
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
10+
v1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1"
1011
v1alpha1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
1112
controllerbundle "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/bundle"
1213
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/cache"
@@ -16,10 +17,12 @@ import (
1617
corev1 "k8s.io/api/core/v1"
1718
"k8s.io/apimachinery/pkg/api/errors"
1819
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20+
"k8s.io/apimachinery/pkg/labels"
1921
)
2022

2123
const (
2224
BundleLookupConditionPacked v1alpha1.BundleLookupConditionType = "BundleLookupNotPersisted"
25+
exclusionAnnotation string = "olm.operatorframework.io/exclude-global-namespace-resolution"
2326
)
2427

2528
// init hooks provides the downstream a way to modify the upstream behavior
@@ -32,6 +35,7 @@ type StepResolver interface {
3235
type OperatorStepResolver struct {
3336
subLister v1alpha1listers.SubscriptionLister
3437
csvLister v1alpha1listers.ClusterServiceVersionLister
38+
ogLister v1listers.OperatorGroupLister
3539
client versioned.Interface
3640
globalCatalogNamespace string
3741
resolver *Resolver
@@ -69,6 +73,7 @@ func NewOperatorStepResolver(lister operatorlister.OperatorLister, client versio
6973
stepResolver := &OperatorStepResolver{
7074
subLister: lister.OperatorsV1alpha1().SubscriptionLister(),
7175
csvLister: lister.OperatorsV1alpha1().ClusterServiceVersionLister(),
76+
ogLister: lister.OperatorsV1().OperatorGroupLister(),
7277
client: client,
7378
globalCatalogNamespace: globalCatalogNamespace,
7479
resolver: NewDefaultResolver(cacheSourceProvider, catsrcPriorityProvider{lister: lister.OperatorsV1alpha1().CatalogSourceLister()}, log),
@@ -91,7 +96,22 @@ func (r *OperatorStepResolver) ResolveSteps(namespace string) ([]*v1alpha1.Step,
9196
return nil, nil, nil, err
9297
}
9398

94-
namespaces := []string{namespace, r.globalCatalogNamespace}
99+
namespaces := []string{namespace}
100+
ogs, err := r.ogLister.OperatorGroups(namespace).List(labels.Everything())
101+
if err != nil {
102+
return nil, nil, nil, fmt.Errorf("listing operatorgroups in namespace %s: %s", namespace, err)
103+
}
104+
if len(ogs) != 1 {
105+
return nil, nil, nil, fmt.Errorf("expected 1 OperatorGroup in the namespace, found %d", len(ogs))
106+
}
107+
og := ogs[0]
108+
if val, ok := og.Annotations[exclusionAnnotation]; ok && val == "true" {
109+
// Exclusion specified
110+
// Ignore the globalNamespace for the purposes of resolution in this namespace
111+
r.log.Printf("excluding global catalogs from resolution in namespace %s", namespace)
112+
} else {
113+
namespaces = append(namespaces, r.globalCatalogNamespace)
114+
}
95115
operators, err := r.resolver.Resolve(namespaces, subs)
96116
if err != nil {
97117
return nil, nil, nil, err

0 commit comments

Comments
 (0)