Skip to content

Commit b6b66e0

Browse files
committed
test : create token when Kubernetes version > 1.24
To ensure we don't fail waiting for token on newer versions of Kubernetes, add a check to create token if we're on newer versions of Kubernetes rather than waiting for ServiceAccount token to become available. Signed-off-by: Rohan Kumar <[email protected]>
1 parent 608bf21 commit b6b66e0

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ require (
1818
github.com/robfig/cron/v3 v3.0.0
1919
github.com/stretchr/testify v1.10.0
2020
golang.org/x/crypto v0.36.0
21+
golang.org/x/mod v0.19.0
2122
golang.org/x/net v0.38.0
2223
k8s.io/api v0.30.1
2324
k8s.io/apiextensions-apiserver v0.30.1
@@ -95,7 +96,6 @@ require (
9596
go.uber.org/multierr v1.11.0 // indirect
9697
go.uber.org/zap v1.26.0 // indirect
9798
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
98-
golang.org/x/mod v0.19.0 // indirect
9999
golang.org/x/oauth2 v0.12.0 // indirect
100100
golang.org/x/sync v0.12.0 // indirect
101101
golang.org/x/sys v0.31.0 // indirect

test/e2e/cmd/workspaces_test.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"os"
2222
"testing"
2323

24+
"golang.org/x/mod/semver"
25+
2426
"github.com/devfile/devworkspace-operator/test/e2e/pkg/client"
2527
"github.com/devfile/devworkspace-operator/test/e2e/pkg/config"
2628
_ "github.com/devfile/devworkspace-operator/test/e2e/pkg/tests"
@@ -79,9 +81,18 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
7981
ginkgo.Fail("Cannot create test rolebinding for SA. Cause: " + err.Error())
8082
}
8183

82-
token, err := config.AdminK8sClient.WaitSAToken(config.DevWorkspaceNamespace, testServiceAccount)
84+
var token = ""
85+
version, err := config.AdminK8sClient.CheckK8sVersion()
8386
if err != nil {
84-
ginkgo.Fail("Cannot get test SA token. Cause: " + err.Error())
87+
ginkgo.Fail("Cannot check k8s version. Cause: " + err.Error())
88+
}
89+
if semver.Compare(version, "v1.24.0") >= 0 {
90+
token, err = config.AdminK8sClient.CreateSAToken(config.DevWorkspaceNamespace, testServiceAccount)
91+
} else {
92+
token, err = config.AdminK8sClient.WaitSAToken(config.DevWorkspaceNamespace, testServiceAccount)
93+
if err != nil {
94+
ginkgo.Fail("Cannot get test SA token. Cause: " + err.Error())
95+
}
8596
}
8697

8798
config.DevK8sClient, err = client.NewK8sClientWithToken(kubeConfig, token)

test/e2e/pkg/client/rbac.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
"log"
2323
"time"
2424

25+
v1 "k8s.io/api/authentication/v1"
26+
2527
corev1 "k8s.io/api/core/v1"
2628
rbacv1 "k8s.io/api/rbac/v1"
2729
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
@@ -65,6 +67,24 @@ func (w *K8sClient) AssignRoleToSA(namespace, serviceAccount, role string) error
6567
return err
6668
}
6769

70+
func (w *K8sClient) CheckK8sVersion() (string, error) {
71+
versionInfo, err := w.kubeClient.Discovery().ServerVersion()
72+
if err != nil {
73+
return "", err
74+
}
75+
return versionInfo.String(), nil
76+
}
77+
78+
func (w *K8sClient) CreateSAToken(namespace string, serviceAccountName string) (string, error) {
79+
tokenRequest, err := w.kubeClient.CoreV1().ServiceAccounts(namespace).CreateToken(context.TODO(), serviceAccountName, &v1.TokenRequest{
80+
Spec: v1.TokenRequestSpec{},
81+
}, metav1.CreateOptions{})
82+
if err != nil {
83+
return "", err
84+
}
85+
return tokenRequest.Status.Token, nil
86+
}
87+
6888
// WaitSAToken waits until a secret with the token related to the specified SA
6989
// error is returned if token is not found after 10 seconds of tries
7090
func (w *K8sClient) WaitSAToken(namespace, serviceAccount string) (token string, err error) {

0 commit comments

Comments
 (0)