File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ func init() {
2626 allProviders [providers .RKE ] = providers .IsRKE
2727 allProviders [providers .RKE_WINDOWS ] = providers .IsRKEWindows
2828 allProviders [providers .RKE2 ] = providers .IsRKE2
29+ allProviders [providers .RKE2_WINDOWS ] = providers .IsRKE2Windows
2930}
3031
3132// DetectProvider accepts a k8s interface and checks all registered providers for a match
Original file line number Diff line number Diff line change 1+ package providers
2+
3+ import (
4+ "context"
5+
6+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+ "k8s.io/client-go/kubernetes"
8+ )
9+
10+ const RKE2_WINDOWS = "rke2.windows"
11+
12+
13+ func IsRKE2Windows (ctx context.Context , k8sClient kubernetes.Interface ) (bool , error ) {
14+ // Check if the cluster is rke2 to avoid false positive of rke1 windows clusters
15+ if isRKE2 , err := IsRKE2 (ctx , k8sClient ); err != nil || ! isRKE2 {
16+ return false , err
17+ }
18+ if isHarvester , err := IsHarvester (ctx , k8sClient ); err != nil || isHarvester {
19+ return false , err
20+ }
21+ // Look for nodes that have a Windows specific label
22+ listOpts := metav1.ListOptions {
23+ Limit : 1 ,
24+ LabelSelector : "kubernetes.io/os=windows" ,
25+ }
26+
27+ windowsNodes , err := k8sClient .CoreV1 ().Nodes ().List (ctx , listOpts )
28+ if err != nil {
29+ return false , err
30+ }
31+ if len (windowsNodes .Items ) == 0 {
32+ return false , nil
33+ }
34+
35+ return len (windowsNodes .Items ) > 0 , nil
36+ }
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package providers
22
33import (
44 "context"
5+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
56 "strings"
67
78 "k8s.io/client-go/kubernetes"
@@ -10,6 +11,18 @@ import (
1011const RKE2 = "rke2"
1112
1213func IsRKE2 (ctx context.Context , k8sClient kubernetes.Interface ) (bool , error ) {
14+ // if there are windows nodes then this should not be counted as rke2.linux
15+ windowsNodes , err := k8sClient .CoreV1 ().Nodes ().List (ctx , metav1.ListOptions {
16+ Limit : 1 ,
17+ LabelSelector : "kubernetes.io/os=windows" ,
18+ })
19+ if err != nil {
20+ return false , err
21+ }
22+ if len (windowsNodes .Items ) != 0 {
23+ return false , nil
24+ }
25+
1326 if isHarvester , err := IsHarvester (ctx , k8sClient ); err != nil || isHarvester {
1427 return false , err
1528 }
You can’t perform that action at this time.
0 commit comments