Skip to content

Commit 15790a8

Browse files
Merge pull request #2081 from njhale/openshift/block-upgrades
Block OpenShift upgrades while incompatible operators are installed
2 parents 44a00ee + ecac3be commit 15790a8

File tree

27 files changed

+2081
-91
lines changed

27 files changed

+2081
-91
lines changed

cmd/olm/main.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ import (
1616
"github.com/sirupsen/logrus"
1717
"github.com/spf13/pflag"
1818
v1 "k8s.io/api/core/v1"
19-
2019
"k8s.io/klog"
20+
ctrl "sigs.k8s.io/controller-runtime"
2121

2222
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
2323
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/olm"
24+
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/openshift"
2425
"github.com/operator-framework/operator-lifecycle-manager/pkg/feature"
2526
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/filemonitor"
2627
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
@@ -223,7 +224,24 @@ func main() {
223224
<-op.Ready()
224225

225226
if *writeStatusName != "" {
226-
operatorstatus.MonitorClusterStatus(*writeStatusName, op.AtLevel(), ctx.Done(), opClient, configClient, crClient)
227+
reconciler, err := openshift.NewClusterOperatorReconciler(
228+
openshift.WithClient(mgr.GetClient()),
229+
openshift.WithScheme(mgr.GetScheme()),
230+
openshift.WithLog(ctrl.Log.WithName("controllers").WithName("clusteroperator")),
231+
openshift.WithName(*writeStatusName),
232+
openshift.WithNamespace(*namespace),
233+
openshift.WithSyncChannel(op.AtLevel()),
234+
openshift.WithOLMOperator(),
235+
)
236+
if err != nil {
237+
logger.WithError(err).Fatalf("error configuring openshift integration")
238+
return
239+
}
240+
241+
if err := reconciler.SetupWithManager(mgr); err != nil {
242+
logger.WithError(err).Fatalf("error configuring openshift integration")
243+
return
244+
}
227245
}
228246

229247
if *writePackageServerStatusName != "" {

cmd/olm/manager.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@ func Manager(ctx context.Context, debug bool) (ctrl.Manager, error) {
4747
return nil, err
4848
}
4949

50-
// Setup a new controller to reconcile Operators
51-
setupLog.Info("configuring controller")
5250
if feature.Gate.Enabled(feature.OperatorLifecycleManagerV1) {
51+
// Setup a new controller to reconcile Operators
5352
operatorReconciler, err := operators.NewOperatorReconciler(
5453
mgr.GetClient(),
5554
ctrl.Log.WithName("controllers").WithName("operator"),
@@ -77,7 +76,6 @@ func Manager(ctx context.Context, debug bool) (ctrl.Manager, error) {
7776
}
7877

7978
}
80-
8179
setupLog.Info("manager configured")
8280

8381
return mgr, nil

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ require (
5151
k8s.io/klog v1.0.0
5252
k8s.io/kube-aggregator v0.20.4
5353
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd
54-
k8s.io/utils v0.0.0-20201110183641-67b214c5f920
54+
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009
5555
rsc.io/letsencrypt v0.0.3 // indirect
56-
sigs.k8s.io/controller-runtime v0.8.0
56+
sigs.k8s.io/controller-runtime v0.8.3
5757
sigs.k8s.io/controller-tools v0.4.1
5858
sigs.k8s.io/kind v0.10.0
5959
)

go.sum

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,6 +1362,7 @@ k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8=
13621362
k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
13631363
k8s.io/api v0.20.0/go.mod h1:HyLC5l5eoS/ygQYl1BXBgFzWNlkHiAuyNAbevIn+FKg=
13641364
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
1365+
k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8=
13651366
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
13661367
k8s.io/api v0.20.6 h1:bgdZrW++LqgrLikWYNruIKAtltXbSCX2l5mJu11hrVE=
13671368
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
@@ -1375,6 +1376,7 @@ k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftc
13751376
k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
13761377
k8s.io/apimachinery v0.20.0/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
13771378
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
1379+
k8s.io/apimachinery v0.20.2/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
13781380
k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
13791381
k8s.io/apimachinery v0.20.6 h1:R5p3SlhaABYShQSO6LpPsYHjV05Q+79eBUR0Ut/f4tk=
13801382
k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
@@ -1391,6 +1393,7 @@ k8s.io/client-go v0.18.0/go.mod h1:uQSYDYs4WhVZ9i6AIoEZuwUggLVEF64HOD37boKAtF8=
13911393
k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
13921394
k8s.io/client-go v0.20.0/go.mod h1:4KWh/g+Ocd8KkCwKF8vUNnmqgv+EVnQDK4MBF4oB5tY=
13931395
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
1396+
k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE=
13941397
k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
13951398
k8s.io/client-go v0.20.6 h1:nJZOfolnsVtDtbGJNCxzOtKUAu7zvXjB8+pMo9UNxZo=
13961399
k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
@@ -1405,6 +1408,7 @@ k8s.io/component-base v0.18.0/go.mod h1:u3BCg0z1uskkzrnAKFzulmYaEpZF7XC9Pf/uFyb1
14051408
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
14061409
k8s.io/component-base v0.20.0/go.mod h1:wKPj+RHnAr8LW2EIBIK7AxOHPde4gme2lzXwVSoRXeA=
14071410
k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
1411+
k8s.io/component-base v0.20.2/go.mod h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0=
14081412
k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
14091413
k8s.io/component-base v0.20.6 h1:G0inASS5vAqCpzs7M4Sp9dv9d0aElpz39zDHbSB4f4g=
14101414
k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
@@ -1435,8 +1439,9 @@ k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
14351439
k8s.io/metrics v0.18.0/go.mod h1:8aYTW18koXqjLVKL7Ds05RPMX9ipJZI3mywYvBOxXd4=
14361440
k8s.io/metrics v0.20.0/go.mod h1:9yiRhfr8K8sjdj2EthQQE9WvpYDvsXIV3CjN4Ruq4Jw=
14371441
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
1438-
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
14391442
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
1443+
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009 h1:0T5IaWHO3sJTEmCP6mUlBvMukxPKUQWqiI/YuiBNMiQ=
1444+
k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
14401445
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
14411446
rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM=
14421447
rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY=
@@ -1447,8 +1452,9 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz
14471452
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15 h1:4uqm9Mv+w2MmBYD+F4qf/v6tDFUdPOk29C095RbU5mY=
14481453
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
14491454
sigs.k8s.io/controller-runtime v0.6.0/go.mod h1:CpYf5pdNY/B352A1TFLAS2JVSlnGQ5O2cftPHndTroo=
1450-
sigs.k8s.io/controller-runtime v0.8.0 h1:s0dYdo7lQgJiAf+alP82PRwbz+oAqL3oSyMQ18XRDOc=
14511455
sigs.k8s.io/controller-runtime v0.8.0/go.mod h1:v9Lbj5oX443uR7GXYY46E0EE2o7k2YxQ58GxVNeXSW4=
1456+
sigs.k8s.io/controller-runtime v0.8.3 h1:GMHvzjTmaWHQB8HadW+dIvBoJuLvZObYJ5YoZruPRao=
1457+
sigs.k8s.io/controller-runtime v0.8.3/go.mod h1:U/l+DUopBc1ecfRZ5aviA9JDmGFQKvLf5YkZNx2e0sU=
14521458
sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI=
14531459
sigs.k8s.io/controller-tools v0.4.1 h1:VkuV0MxlRPmRu5iTgBZU4UxUX2LiR99n3sdQGRxZF4w=
14541460
sigs.k8s.io/controller-tools v0.4.1/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU=
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package openshift
2+
3+
import (
4+
"context"
5+
6+
configv1 "github.com/openshift/api/config/v1"
7+
utilerrors "k8s.io/apimachinery/pkg/util/errors"
8+
)
9+
10+
func NewClusterOperator(name string) *ClusterOperator {
11+
co := &ClusterOperator{ClusterOperator: &configv1.ClusterOperator{}}
12+
co.SetName(name)
13+
return co
14+
}
15+
16+
type ClusterOperator struct {
17+
*configv1.ClusterOperator
18+
}
19+
20+
func (c *ClusterOperator) GetOperatorVersion() string {
21+
for _, v := range c.Status.Versions {
22+
if v.Name == "operator" {
23+
return v.Version
24+
}
25+
}
26+
27+
return ""
28+
}
29+
30+
func (c *ClusterOperator) GetCondition(conditionType configv1.ClusterStatusConditionType) *configv1.ClusterOperatorStatusCondition {
31+
for _, cond := range c.Status.Conditions {
32+
if cond.Type == conditionType {
33+
return &cond
34+
}
35+
}
36+
37+
return nil
38+
}
39+
40+
func (c *ClusterOperator) SetCondition(condition *configv1.ClusterOperatorStatusCondition) {
41+
// Filter dups
42+
conditions := []configv1.ClusterOperatorStatusCondition{}
43+
for _, c := range c.Status.Conditions {
44+
if c.Type != condition.Type {
45+
conditions = append(conditions, c)
46+
}
47+
}
48+
49+
c.Status.Conditions = append(conditions, *condition)
50+
}
51+
52+
type Mutator interface {
53+
Mutate(context.Context, *ClusterOperator) error
54+
}
55+
56+
type MutateFunc func(context.Context, *ClusterOperator) error
57+
58+
func (m MutateFunc) Mutate(ctx context.Context, co *ClusterOperator) error {
59+
return m(ctx, co)
60+
}
61+
62+
type SerialMutations []Mutator
63+
64+
func (s SerialMutations) Mutate(ctx context.Context, co *ClusterOperator) error {
65+
var errs []error
66+
for _, m := range s {
67+
if err := m.Mutate(ctx, co); err != nil {
68+
errs = append(errs, err)
69+
}
70+
}
71+
72+
return utilerrors.NewAggregate(errs)
73+
}

0 commit comments

Comments
 (0)