Skip to content

Commit 4b8199d

Browse files
Merge pull request #708 from kevinrizza/fix-timing-issue
OCPBUGS-23744: Wait for required RBAC before creating packageserver CSV
2 parents cce0b4b + 6771690 commit 4b8199d

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

cmd/package-server-manager/main.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import (
1111
"k8s.io/apimachinery/pkg/fields"
1212
_ "k8s.io/client-go/plugin/pkg/client/auth"
1313

14+
corev1 "k8s.io/api/core/v1"
15+
rbacv1 "k8s.io/api/rbac/v1"
16+
1417
ctrl "sigs.k8s.io/controller-runtime"
1518
"sigs.k8s.io/controller-runtime/pkg/cache"
1619
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -80,6 +83,9 @@ func run(cmd *cobra.Command, args []string) error {
8083
le := leaderelection.GetLeaderElectionConfig(setupLog, restConfig, !disableLeaderElection)
8184

8285
packageserverCSVFields := fields.Set{"metadata.name": name}
86+
serviceaccountFields := fields.Set{"metadata.name": "olm-operator-serviceaccount"}
87+
clusterroleFields := fields.Set{"metadata.name": "system:controller:operator-lifecycle-manager"}
88+
clusterrolebindingFields := fields.Set{"metadata.name": "olm-operator-binding-openshift-operator-lifecycle-manager"}
8389
mgr, err := ctrl.NewManager(restConfig, manager.Options{
8490
Scheme: setupScheme(),
8591
Metrics: metricsserver.Options{BindAddress: metricsAddr},
@@ -100,6 +106,15 @@ func run(cmd *cobra.Command, args []string) error {
100106
&olmv1alpha1.ClusterServiceVersion{}: {
101107
Field: packageserverCSVFields.AsSelector(),
102108
},
109+
&corev1.ServiceAccount{}: {
110+
Field: serviceaccountFields.AsSelector(),
111+
},
112+
&rbacv1.ClusterRole{}: {
113+
Field: clusterroleFields.AsSelector(),
114+
},
115+
&rbacv1.ClusterRoleBinding{}: {
116+
Field: clusterrolebindingFields.AsSelector(),
117+
},
103118
},
104119
},
105120
})

pkg/package-server-manager/controller.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import (
2727
"github.com/openshift/operator-framework-olm/pkg/manifests"
2828
olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"
2929

30+
corev1 "k8s.io/api/core/v1"
31+
rbacv1 "k8s.io/api/rbac/v1"
3032
"k8s.io/apimachinery/pkg/runtime"
3133
"k8s.io/apimachinery/pkg/types"
3234

@@ -67,6 +69,10 @@ func (r *PackageServerCSVReconciler) Reconcile(ctx context.Context, req ctrl.Req
6769
log.Info("handling current request", "request", req.String())
6870
defer log.Info("finished request reconciliation")
6971

72+
if err := ensureRBAC(r.Client, ctx, r.Namespace, log); err != nil {
73+
return ctrl.Result{}, err
74+
}
75+
7076
var infra configv1.Infrastructure
7177
if err := r.Client.Get(ctx, types.NamespacedName{Name: infrastructureName}, &infra); err != nil {
7278
return ctrl.Result{}, err
@@ -102,6 +108,21 @@ func (r *PackageServerCSVReconciler) Reconcile(ctx context.Context, req ctrl.Req
102108
return ctrl.Result{}, nil
103109
}
104110

111+
func ensureRBAC(client client.Client, ctx context.Context, namespace string, log logr.Logger) error {
112+
log.Info("checking to see if required RBAC exists")
113+
if err := client.Get(ctx, types.NamespacedName{Name: "olm-operator-serviceaccount", Namespace: namespace}, &corev1.ServiceAccount{}); err != nil {
114+
return fmt.Errorf("could not get service account:%v", err)
115+
}
116+
if err := client.Get(ctx, types.NamespacedName{Name: "system:controller:operator-lifecycle-manager"}, &rbacv1.ClusterRole{}); err != nil {
117+
return fmt.Errorf("could not get ClusterRole:% v", err)
118+
}
119+
if err := client.Get(ctx, types.NamespacedName{Name: "olm-operator-binding-openshift-operator-lifecycle-manager"}, &rbacv1.ClusterRoleBinding{}); err != nil {
120+
return fmt.Errorf("could not get ClusterRoleBinding: %v", err)
121+
}
122+
log.Info("confimed required RBAC exists")
123+
return nil
124+
}
125+
105126
func reconcileCSV(log logr.Logger, image string, interval string, csv *olmv1alpha1.ClusterServiceVersion, highAvailabilityMode bool) error {
106127
if csv.ObjectMeta.CreationTimestamp.IsZero() {
107128
log.Info("attempting to create the packageserver csv")

0 commit comments

Comments
 (0)