Skip to content
Merged
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
1 change: 1 addition & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ rules:
- apiGroups:
- config.openshift.io
resources:
- clusterversions
- infrastructures
verbs:
- get
Expand Down
2 changes: 1 addition & 1 deletion controllers/performanceprofile_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ func validateUpdateEvent(e *event.UpdateEvent) bool {
// +kubebuilder:rbac:groups=machineconfiguration.openshift.io,resources=machineconfigs;machineconfigpools;kubeletconfigs,verbs=*
// +kubebuilder:rbac:groups=tuned.openshift.io,resources=tuneds;profiles,verbs=*
// +kubebuilder:rbac:groups=node.k8s.io,resources=runtimeclasses,verbs=*
// +kubebuilder:rbac:groups=config.openshift.io,resources=infrastructures,verbs=get;list;watch
// +kubebuilder:rbac:groups=config.openshift.io,resources=infrastructures;clusterversions,verbs=get;list;watch
// +kubebuilder:rbac:namespace="openshift-performance-addon-operator",groups=core,resources=pods;services;services/finalizers;configmaps,verbs=*
// +kubebuilder:rbac:namespace="openshift-performance-addon-operator",groups=coordination.k8s.io,resources=leases,verbs=create;get;list;update
// +kubebuilder:rbac:namespace="openshift-performance-addon-operator",groups=apps,resourceNames=performance-operator,resources=deployments/finalizers,verbs=update
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ spec:
- apiGroups:
- config.openshift.io
resources:
- clusterversions
- infrastructures
verbs:
- get
Expand Down
60 changes: 58 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ limitations under the License.
package main

import (
"context"
"flag"
"fmt"
"os"
"os/signal"
"runtime"
"strings"
"syscall"

performancev1 "github.com/openshift-kni/performance-addon-operators/api/v1"
performancev1alpha1 "github.com/openshift-kni/performance-addon-operators/api/v1alpha1"
Expand All @@ -28,10 +33,12 @@ import (
"github.com/openshift-kni/performance-addon-operators/pkg/controller/performanceprofile/components"
"github.com/openshift-kni/performance-addon-operators/pkg/utils/leaderelection"
"github.com/openshift-kni/performance-addon-operators/version"
"github.com/spf13/cobra"

v1 "github.com/openshift/api/config/v1"
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"
"github.com/spf13/cobra"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/client"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog"
Expand Down Expand Up @@ -109,6 +116,53 @@ func newRootCommand() *cobra.Command {
return cmd
}

func sleepUntilTERM() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, os.Interrupt, syscall.SIGTERM)

for {
if sig := <-sigs; sig == syscall.SIGTERM {
signal.Stop(sigs)
klog.Info("SIGTERM caught")
break
}
}
}

func detectOCP411(cfg *rest.Config) {
// Detect cluster version
// and cease operation (do not die to avoid respawn) when on 4.11
// as the PAO logic is provided by NTO there
k8sclient, err := client.New(cfg, client.Options{})
if err != nil {
klog.Fatalf("could not detect cluster version: failed to create client: %v", err)
}

// Register OCP types to the client
if err := v1.Install(k8sclient.Scheme()); err != nil {
klog.Fatalf("could not detect cluster version: failed to register OCP types: %v", err)
}

// Get OCP version objects (there should be just one)
clusterversionlist := v1.ClusterVersionList{}
ctx := context.Background()
if err := k8sclient.List(ctx, &clusterversionlist); err != nil {
klog.Fatalf("could not detect cluster version: %v", err)
}
if len(clusterversionlist.Items) == 0 {
klog.Fatalf("could not detect cluster version: no version objects found")
}

// Detect 4.11
// The operator will not be installable on 4.12 so this is
// the only exception we need to check for
if strings.HasPrefix(clusterversionlist.Items[0].Status.Desired.Version, "4.11") {
klog.Error("This operator's functionality is provided by the Node Tuning Operator from now on. Hibernating.")
sleepUntilTERM()
os.Exit(0)
}
}

func runPAO() {
var metricsAddr string
var enableLeaderElection bool
Expand Down Expand Up @@ -136,6 +190,8 @@ func runPAO() {
restConfig := ctrl.GetConfigOrDie()
le := leaderelection.GetLeaderElectionConfig(restConfig, enableLeaderElection)

detectOCP411(restConfig)

mgr, err := ctrl.NewManager(restConfig, ctrl.Options{
NewCache: cache.MultiNamespacedCacheBuilder(namespaces),
Scheme: scheme,
Expand Down