Skip to content

Commit 40bf349

Browse files
yansun1996sajmera-pensando
authored andcommitted
Refactor IsOpenshift function based on RedHat suggestion
1 parent 70a556a commit 40bf349

File tree

4 files changed

+47
-40
lines changed

4 files changed

+47
-40
lines changed

cmd/main.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ package main
3535
import (
3636
"flag"
3737

38-
"github.com/ROCm/gpu-operator/internal/configmanager"
39-
"github.com/ROCm/gpu-operator/internal/metricsexporter"
40-
"github.com/ROCm/gpu-operator/internal/testrunner"
4138
kmmv1beta1 "github.com/rh-ecosystem-edge/kernel-module-management/api/v1beta1"
4239
"k8s.io/apimachinery/pkg/runtime"
4340
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -51,11 +48,15 @@ import (
5148
_ "k8s.io/client-go/plugin/pkg/client/auth"
5249

5350
gpuev1alpha1 "github.com/ROCm/gpu-operator/api/v1alpha1"
51+
utils "github.com/ROCm/gpu-operator/internal"
5452
"github.com/ROCm/gpu-operator/internal/cmd"
5553
"github.com/ROCm/gpu-operator/internal/config"
54+
"github.com/ROCm/gpu-operator/internal/configmanager"
5655
"github.com/ROCm/gpu-operator/internal/controllers"
5756
"github.com/ROCm/gpu-operator/internal/kmmmodule"
57+
"github.com/ROCm/gpu-operator/internal/metricsexporter"
5858
"github.com/ROCm/gpu-operator/internal/nodelabeller"
59+
"github.com/ROCm/gpu-operator/internal/testrunner"
5960
//+kubebuilder:scaffold:imports
6061
)
6162

@@ -107,8 +108,9 @@ func main() {
107108
}
108109

109110
client := mgr.GetClient()
110-
kmmHandler := kmmmodule.NewKMMModule(client, scheme)
111-
nlHandler := nodelabeller.NewNodeLabeller(scheme)
111+
isOpenShift := utils.IsOpenShift(setupLogger)
112+
kmmHandler := kmmmodule.NewKMMModule(client, scheme, isOpenShift)
113+
nlHandler := nodelabeller.NewNodeLabeller(scheme, isOpenShift)
112114
metricsHandler := metricsexporter.NewMetricsExporter(scheme)
113115
testrunnerHandler := testrunner.NewTestRunner(scheme)
114116
configmanagerHandler := configmanager.NewConfigManager(scheme)

internal/kmmmodule/kmmmodule.go

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,8 @@ import (
5555
"k8s.io/apimachinery/pkg/runtime"
5656
"k8s.io/apimachinery/pkg/types"
5757
"k8s.io/apimachinery/pkg/util/intstr"
58-
"k8s.io/client-go/discovery"
5958
"k8s.io/client-go/kubernetes"
6059
"k8s.io/client-go/rest"
61-
ctrl "sigs.k8s.io/controller-runtime"
6260
"sigs.k8s.io/controller-runtime/pkg/client"
6361
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
6462
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -107,27 +105,14 @@ type kmmModule struct {
107105
isOpenShift bool
108106
}
109107

110-
func NewKMMModule(client client.Client, scheme *runtime.Scheme) KMMModuleAPI {
108+
func NewKMMModule(client client.Client, scheme *runtime.Scheme, isOpenShift bool) KMMModuleAPI {
111109
return &kmmModule{
112110
client: client,
113111
scheme: scheme,
114-
isOpenShift: isOpenshift(),
112+
isOpenShift: isOpenShift,
115113
}
116114
}
117115

118-
func isOpenshift() bool {
119-
if dc, err := discovery.NewDiscoveryClientForConfig(ctrl.GetConfigOrDie()); err == nil {
120-
if gplist, err := dc.ServerGroups(); err == nil {
121-
for _, gp := range gplist.Groups {
122-
if gp.Name == "route.openshift.io" {
123-
return true
124-
}
125-
}
126-
}
127-
}
128-
return false
129-
}
130-
131116
func (km *kmmModule) SetNodeVersionLabelAsDesired(ctx context.Context, devConfig *amdv1alpha1.DeviceConfig, nodes *v1.NodeList) error {
132117
// for each selected node
133118
// put the KMM version label given by CR's driver version

internal/nodelabeller/nodelabeller.go

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ import (
4242
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4343
"k8s.io/apimachinery/pkg/runtime"
4444
"k8s.io/apimachinery/pkg/util/intstr"
45-
"k8s.io/client-go/discovery"
4645
"k8s.io/utils/ptr"
47-
ctrl "sigs.k8s.io/controller-runtime"
4846
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4947
)
5048

@@ -66,26 +64,13 @@ type nodeLabeller struct {
6664
isOpenShift bool
6765
}
6866

69-
func NewNodeLabeller(scheme *runtime.Scheme) NodeLabeller {
67+
func NewNodeLabeller(scheme *runtime.Scheme, isOpenshift bool) NodeLabeller {
7068
return &nodeLabeller{
7169
scheme: scheme,
72-
isOpenShift: isOpenshift(),
70+
isOpenShift: isOpenshift,
7371
}
7472
}
7573

76-
func isOpenshift() bool {
77-
if dc, err := discovery.NewDiscoveryClientForConfig(ctrl.GetConfigOrDie()); err == nil {
78-
if gplist, err := dc.ServerGroups(); err == nil {
79-
for _, gp := range gplist.Groups {
80-
if gp.Name == "route.openshift.io" {
81-
return true
82-
}
83-
}
84-
}
85-
}
86-
return false
87-
}
88-
8974
func (nl *nodeLabeller) SetNodeLabellerAsDesired(ds *appsv1.DaemonSet, devConfig *amdv1alpha1.DeviceConfig) error {
9075
if ds == nil {
9176
return fmt.Errorf("daemon set is not initialized, zero pointer")

internal/utils.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,23 @@ limitations under the License.
1717
package utils
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"strings"
2223

23-
amdv1alpha1 "github.com/ROCm/gpu-operator/api/v1alpha1"
24+
"github.com/go-logr/logr"
2425
v1 "k8s.io/api/core/v1"
26+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27+
"k8s.io/client-go/kubernetes"
28+
"k8s.io/client-go/rest"
29+
30+
amdv1alpha1 "github.com/ROCm/gpu-operator/api/v1alpha1"
31+
"github.com/ROCm/gpu-operator/internal/cmd"
2532
)
2633

2734
const (
2835
defaultOcDriversVersion = "6.2.2"
36+
openShiftNodeLabel = "node.openshift.io/os_id"
2937
NodeFeatureLabelAmdGpu = "feature.node.kubernetes.io/amd-gpu"
3038
NodeFeatureLabelAmdVGpu = "feature.node.kubernetes.io/amd-vgpu"
3139
)
@@ -88,3 +96,30 @@ func HasNodeLabelKey(node v1.Node, labelKey string) bool {
8896
}
8997
return false
9098
}
99+
100+
func IsOpenShift(logger logr.Logger) bool {
101+
config, err := rest.InClusterConfig()
102+
if err != nil {
103+
cmd.FatalError(logger, err, "unable to get cluster config")
104+
}
105+
// creates the clientset
106+
clientset, err := kubernetes.NewForConfig(config)
107+
if err != nil {
108+
cmd.FatalError(logger, err, "unable to create cluster clientset")
109+
}
110+
// Check for OpenShift-specific labels on nodes
111+
nodes, err := clientset.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
112+
if err != nil {
113+
cmd.FatalError(logger, err, "unable to list nodes")
114+
}
115+
116+
isOpenShift := false
117+
for _, node := range nodes.Items {
118+
if _, exists := node.Labels[openShiftNodeLabel]; exists {
119+
isOpenShift = true
120+
break
121+
}
122+
}
123+
logger.Info(fmt.Sprintf("IsOpenShift: %+v", isOpenShift))
124+
return isOpenShift
125+
}

0 commit comments

Comments
 (0)