Skip to content

Commit 653ebbc

Browse files
Merge pull request #780 from TheRealJon/CONSOLE-3719
[release-4.12] OCPBUGS-18563: OLM Pages work when copied CSVs are disabled
2 parents 3099155 + cca88b1 commit 653ebbc

File tree

10 files changed

+199
-74
lines changed

10 files changed

+199
-74
lines changed

manifests/03-rbac-role-cluster.yaml

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ metadata:
99
capability.openshift.io/name: Console
1010
rules:
1111
- apiGroups:
12-
- ""
12+
- ""
1313
resources:
14-
- nodes
14+
- nodes
1515
verbs:
16-
- get
17-
- list
18-
- watch
16+
- get
17+
- list
18+
- watch
1919
- apiGroups:
2020
- oauth.openshift.io
2121
resources:
@@ -86,6 +86,14 @@ rules:
8686
- get
8787
- list
8888
- watch
89+
- apiGroups:
90+
- operators.coreos.com
91+
resources:
92+
- olmconfigs
93+
verbs:
94+
- get
95+
- list
96+
- watch
8997
---
9098
kind: ClusterRole
9199
apiVersion: rbac.authorization.k8s.io/v1
@@ -183,15 +191,15 @@ metadata:
183191
rbac.authorization.k8s.io/aggregate-to-edit: "true"
184192
rbac.authorization.k8s.io/aggregate-to-admin: "true"
185193
rules:
186-
- apiGroups:
187-
- helm.openshift.io
188-
resources:
189-
- projecthelmchartrepositories
190-
verbs:
191-
- get
192-
- list
193-
- update
194-
- create
195-
- watch
196-
- patch
197-
- delete
194+
- apiGroups:
195+
- helm.openshift.io
196+
resources:
197+
- projecthelmchartrepositories
198+
verbs:
199+
- get
200+
- list
201+
- update
202+
- create
203+
- watch
204+
- patch
205+
- delete

manifests/03-rbac-role-ns-operator.yaml

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,60 +9,68 @@ metadata:
99
include.release.openshift.io/single-node-developer: "true"
1010
capability.openshift.io/name: Console
1111
rules:
12-
- apiGroups:
13-
- ""
14-
resources:
15-
- configmaps
16-
- events
17-
verbs:
18-
- get
19-
- list
20-
- watch
21-
- create
22-
- update
23-
- delete
24-
- patch
25-
- apiGroups:
26-
- ""
27-
resources:
28-
- pods
29-
verbs:
30-
- get
31-
- list
32-
- watch
33-
- apiGroups:
34-
- apps
35-
resources:
36-
- deployments
37-
- replicasets
38-
verbs:
39-
- get
40-
- list
41-
- watch
42-
- apiGroups:
43-
- config.openshift.io
44-
resources:
45-
- infrastructures
46-
verbs:
47-
- get
48-
- list
49-
- watch
50-
- apiGroups:
51-
- "coordination.k8s.io"
52-
resources:
53-
- leases
54-
verbs:
55-
- get
56-
- create
57-
- update
58-
- apiGroups:
59-
- console.openshift.io
60-
resources:
61-
- consolenotifications
62-
verbs:
63-
- get
64-
- list
65-
- watch
66-
- create
67-
- update
68-
- delete
12+
- apiGroups:
13+
- ""
14+
resources:
15+
- configmaps
16+
- events
17+
verbs:
18+
- get
19+
- list
20+
- watch
21+
- create
22+
- update
23+
- delete
24+
- patch
25+
- apiGroups:
26+
- ""
27+
resources:
28+
- pods
29+
verbs:
30+
- get
31+
- list
32+
- watch
33+
- apiGroups:
34+
- apps
35+
resources:
36+
- deployments
37+
- replicasets
38+
verbs:
39+
- get
40+
- list
41+
- watch
42+
- apiGroups:
43+
- config.openshift.io
44+
resources:
45+
- infrastructures
46+
verbs:
47+
- get
48+
- list
49+
- watch
50+
- apiGroups:
51+
- "coordination.k8s.io"
52+
resources:
53+
- leases
54+
verbs:
55+
- get
56+
- create
57+
- update
58+
- apiGroups:
59+
- console.openshift.io
60+
resources:
61+
- consolenotifications
62+
verbs:
63+
- get
64+
- list
65+
- watch
66+
- create
67+
- update
68+
- delete
69+
- apiGroups:
70+
- operators.coreos.com
71+
resources:
72+
- olmconfigs
73+
verbs:
74+
- get
75+
- list
76+
- watch

pkg/api/api.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ const (
7373
ManagedClusterClaimVersionAnnotation = "version.openshift.io"
7474
ManagedClusterClaimProductAnnotation = "product.open-cluster-management.io"
7575

76+
OLMConfigGroup = "operators.coreos.com"
77+
OLMConfigVersion = "v1"
78+
OLMConfigResource = "olmconfigs"
79+
7680
ConsoleContainerPortName = "https"
7781
ConsoleContainerPort = 443
7882
ConsoleContainerTargetPort = 8443

pkg/console/operator/operator.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import (
99
// kube
1010
apierrors "k8s.io/apimachinery/pkg/api/errors"
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/apimachinery/pkg/runtime/schema"
1213
utilerrors "k8s.io/apimachinery/pkg/util/errors"
14+
"k8s.io/client-go/dynamic"
15+
"k8s.io/client-go/dynamic/dynamicinformer"
1316
corev1 "k8s.io/client-go/informers/core/v1"
1417
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
1518
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -55,6 +58,7 @@ type consoleOperator struct {
5558
ingressConfigClient configclientv1.IngressInterface
5659
proxyConfigClient configclientv1.ProxyInterface
5760
oauthConfigClient configclientv1.OAuthInterface
61+
dynamicClient dynamic.Interface
5862
// core kube
5963
secretsClient coreclientv1.SecretsGetter
6064
configMapClient coreclientv1.ConfigMapsGetter
@@ -75,6 +79,8 @@ func NewConsoleOperator(
7579
// top level config
7680
configClient configclientv1.ConfigV1Interface,
7781
configInformer configinformer.SharedInformerFactory,
82+
dynamicClient dynamic.Interface,
83+
dynamicInformers dynamicinformer.DynamicSharedInformerFactory,
7884
// operator
7985
operatorClient v1helpers.OperatorClient,
8086
operatorConfigClient operatorclientv1.OperatorV1Interface,
@@ -116,6 +122,7 @@ func NewConsoleOperator(
116122
serviceClient: corev1Client,
117123
nodeClient: corev1Client,
118124
deploymentClient: deploymentClient,
125+
dynamicClient: dynamicClient,
119126
// openshift
120127
routeClient: routev1Client,
121128
oauthClient: oauthv1Client,
@@ -135,6 +142,8 @@ func NewConsoleOperator(
135142
configNameFilter := util.IncludeNamesFilter(api.ConfigResourceName)
136143
targetNameFilter := util.IncludeNamesFilter(api.OpenShiftConsoleName)
137144

145+
olmConfigInformer := dynamicInformers.ForResource(schema.GroupVersionResource{Group: api.OLMConfigGroup, Version: api.OLMConfigVersion, Resource: api.OLMConfigResource})
146+
138147
return factory.New().
139148
WithFilteredEventsInformers( // configs
140149
configNameFilter,
@@ -144,6 +153,7 @@ func NewConsoleOperator(
144153
configV1Informers.Ingresses().Informer(),
145154
configV1Informers.Proxies().Informer(),
146155
configV1Informers.OAuths().Informer(),
156+
olmConfigInformer.Informer(),
147157
).WithFilteredEventsInformers( // console resources
148158
targetNameFilter,
149159
deploymentInformer.Informer(),

pkg/console/operator/sync_v400.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
corev1 "k8s.io/api/core/v1"
1313
apierrors "k8s.io/apimachinery/pkg/api/errors"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
16+
"k8s.io/apimachinery/pkg/runtime/schema"
1517
"k8s.io/apimachinery/pkg/util/sets"
1618
"k8s.io/klog/v2"
1719

@@ -408,6 +410,11 @@ func (co *consoleOperator) SyncConfigMap(
408410
return nil, false, "FailedGetMonitoringSharedConfig", mscErr
409411
}
410412

413+
copiedCSVsDisabled, ccdErr := co.isCopiedCSVsDisabled(ctx)
414+
if ccdErr != nil {
415+
return nil, false, "FailedGetOLMConfig", ccdErr
416+
}
417+
411418
defaultConfigmap, _, err := configmapsub.DefaultConfigMap(
412419
operatorConfig,
413420
consoleConfig,
@@ -420,6 +427,7 @@ func (co *consoleOperator) SyncConfigMap(
420427
availablePlugins,
421428
managedClusterConfigFile,
422429
nodeArchitectures,
430+
copiedCSVsDisabled,
423431
)
424432
if err != nil {
425433
return nil, false, "FailedConsoleConfigBuilder", err
@@ -621,3 +629,16 @@ func getNodeArchitectures(nodes *corev1.NodeList) []string {
621629
}
622630
return nodeArchitecturesSet.List()
623631
}
632+
633+
func (co *consoleOperator) isCopiedCSVsDisabled(ctx context.Context) (bool, error) {
634+
olmConfig, err := co.dynamicClient.Resource(schema.GroupVersionResource{Group: api.OLMConfigGroup, Version: api.OLMConfigVersion, Resource: api.OLMConfigResource}).Get(ctx, api.ConfigResourceName, metav1.GetOptions{})
635+
if err != nil {
636+
return false, err
637+
}
638+
copiedCSVsDisabled, found, err := unstructured.NestedBool(olmConfig.Object, "spec", "features", "disableCopiedCSVs")
639+
if err != nil || !found {
640+
return false, err
641+
}
642+
643+
return copiedCSVsDisabled, nil
644+
}

pkg/console/starter/starter.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle
189189
// top level config
190190
configClient.ConfigV1(),
191191
configInformers,
192+
dynamicClient,
193+
dynamicInformers,
192194
// operator
193195
operatorClient,
194196
operatorConfigClient.OperatorV1(),

pkg/console/subresource/configmap/configmap.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func DefaultConfigMap(
5252
availablePlugins []*v1.ConsolePlugin,
5353
managedClusterConfigFile string,
5454
nodeArchitectures []string,
55+
copiedCSVsDisabled bool,
5556
) (consoleConfigMap *corev1.ConfigMap, unsupportedOverridesHaveMerged bool, err error) {
5657

5758
defaultBuilder := &consoleserver.ConsoleServerCLIConfigBuilder{}
@@ -65,6 +66,7 @@ func DefaultConfigMap(
6566
InactivityTimeout(inactivityTimeoutSeconds).
6667
ReleaseVersion().
6768
NodesArchitecture(nodeArchitectures).
69+
CopiedCSVsDisabled(copiedCSVsDisabled).
6870
ConfigYAML()
6971
if err != nil {
7072
klog.Errorf("failed to generate default console-config config: %v", err)

0 commit comments

Comments
 (0)