Skip to content

Commit f2c737b

Browse files
committed
add rke2 windows provider
1 parent 7cdff78 commit f2c737b

3 files changed

Lines changed: 50 additions & 0 deletions

File tree

detector.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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

providers/rke2-windows.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
}

providers/rke2.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package providers
22

33
import (
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 (
1011
const RKE2 = "rke2"
1112

1213
func 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
}

0 commit comments

Comments
 (0)