Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,18 @@ rules:
- tuneds
verbs:
- '*'
- apiGroups:
- operators.coreos.com
resources:
- clusterserviceversions
- operatorgroups
- subscriptions
verbs:
- get
- list
- update
- watch
- delete

---
apiVersion: rbac.authorization.k8s.io/v1
Expand Down
85 changes: 82 additions & 3 deletions controllers/performanceprofile_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,13 @@ import (
tunedv1 "github.com/openshift/cluster-node-tuning-operator/pkg/apis/tuned/v1"
mcov1 "github.com/openshift/machine-config-operator/pkg/apis/machineconfiguration.openshift.io/v1"

olmv1 "github.com/operator-framework/api/pkg/operators/v1"
olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1"

corev1 "k8s.io/api/core/v1"
nodev1beta1 "k8s.io/api/node/v1beta1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/api/errors"
k8serros "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
Expand All @@ -57,14 +61,14 @@ const finalizer = "foreground-deletion"
// PerformanceProfileReconciler reconciles a PerformanceProfile object
type PerformanceProfileReconciler struct {
client.Client
Scheme *runtime.Scheme
Recorder record.EventRecorder
Scheme *runtime.Scheme
Recorder record.EventRecorder
olmRemoved bool
}

// SetupWithManager creates a new PerformanceProfile Controller and adds it to the Manager.
// The Manager will set fields on the Controller and Start it when the Manager is Started.
func (r *PerformanceProfileReconciler) SetupWithManager(mgr ctrl.Manager) error {

// we want to initate reconcile loop only on change under labels or spec of the object
p := predicate.Funcs{
UpdateFunc: func(e event.UpdateEvent) bool {
Expand Down Expand Up @@ -135,6 +139,72 @@ func (r *PerformanceProfileReconciler) SetupWithManager(mgr ctrl.Manager) error
Complete(r)
}

// uninstall PAO OLM operator and all of its artifacts
// this should apply only from version 4.11
func (r *PerformanceProfileReconciler) removeOLMOperator() error {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you will need a bunch of new permissions for OLM related resources

paoCSV := "performance-addon-operator.v4.10.0"
subscription := &olmv1alpha1.Subscription{}
key := types.NamespacedName{
Name: "performance-addon-operator",
Namespace: "openshift-performance-addon-operator",
}

if err := r.Get(context.TODO(), key, subscription); err != nil {
if !errors.IsNotFound(err) {
return err
}
} else {
klog.Infof("Removing performance-addon-operator subscription %s", subscription.Name)
if subscription.Status.CurrentCSV != paoCSV {
return fmt.Errorf("Subscription to be removed contains a current CSV version %s which is different from %s", subscription.Status.CurrentCSV, paoCSV)
}
if err := r.Delete(context.TODO(), subscription); err != nil {
return err
}
}

csv, err := r.getCSV(paoCSV, "openshift-performance-addon-operator")
if err != nil {
if !errors.IsNotFound(err) {
return err
}
} else {
klog.Infof("Removing performance-addon-operator CSV %s", paoCSV)
if err := r.Delete(context.TODO(), csv); err != nil {
return err
}
}

operatorGroup := &olmv1.OperatorGroup{}
key = types.NamespacedName{
Name: "performance-addon-operator",
Namespace: "openshift-performance-addon-operator",
}

if err := r.Get(context.TODO(), key, operatorGroup); err != nil {
if !errors.IsNotFound(err) {
return err
}
} else {
klog.Infof("Removing performance-addon-operator operator group %s", operatorGroup.Name)
if err := r.Delete(context.TODO(), operatorGroup); err != nil {
return err
}
}

return nil
}

func (r *PerformanceProfileReconciler) getCSV(name, namespace string) (*olmv1alpha1.ClusterServiceVersion, error) {
csv := &olmv1alpha1.ClusterServiceVersion{}
key := types.NamespacedName{
Name: name,
Namespace: namespace,
}
err := r.Get(context.TODO(), key, csv)
return csv, err
}

func (r *PerformanceProfileReconciler) mcpToPerformanceProfile(mcpObj client.Object) []reconcile.Request {
mcp := &mcov1.MachineConfigPool{}

Expand Down Expand Up @@ -233,6 +303,15 @@ func validateUpdateEvent(e *event.UpdateEvent) bool {
func (r *PerformanceProfileReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
klog.Info("Reconciling PerformanceProfile")

// This should be deprecated in openshift 4.12
if !r.olmRemoved {
if err := r.removeOLMOperator(); err != nil {
return reconcile.Result{}, err
} else {
r.olmRemoved = true
}
}

// Fetch the PerformanceProfile instance
instance := &performancev2.PerformanceProfile{}
err := r.Get(ctx, req.NamespacedName, instance)
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading