diff --git a/go.mod b/go.mod index f45bd8a52..ddddc6e15 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/robfig/cron/v3 v3.0.0 github.com/stretchr/testify v1.10.0 golang.org/x/crypto v0.36.0 + golang.org/x/mod v0.19.0 golang.org/x/net v0.38.0 k8s.io/api v0.30.1 k8s.io/apiextensions-apiserver v0.30.1 @@ -95,7 +96,6 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/mod v0.19.0 // indirect golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/sync v0.12.0 // indirect golang.org/x/sys v0.31.0 // indirect diff --git a/test/e2e/cmd/workspaces_test.go b/test/e2e/cmd/workspaces_test.go index 58a7ade78..276275f36 100644 --- a/test/e2e/cmd/workspaces_test.go +++ b/test/e2e/cmd/workspaces_test.go @@ -21,6 +21,8 @@ import ( "os" "testing" + "golang.org/x/mod/semver" + "github.com/devfile/devworkspace-operator/test/e2e/pkg/client" "github.com/devfile/devworkspace-operator/test/e2e/pkg/config" _ "github.com/devfile/devworkspace-operator/test/e2e/pkg/tests" @@ -79,9 +81,18 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte { ginkgo.Fail("Cannot create test rolebinding for SA. Cause: " + err.Error()) } - token, err := config.AdminK8sClient.WaitSAToken(config.DevWorkspaceNamespace, testServiceAccount) + var token = "" + version, err := config.AdminK8sClient.CheckK8sVersion() if err != nil { - ginkgo.Fail("Cannot get test SA token. Cause: " + err.Error()) + ginkgo.Fail("Cannot check k8s version. Cause: " + err.Error()) + } + if semver.Compare(version, "v1.24.0") >= 0 { + token, err = config.AdminK8sClient.CreateSAToken(config.DevWorkspaceNamespace, testServiceAccount) + } else { + token, err = config.AdminK8sClient.WaitSAToken(config.DevWorkspaceNamespace, testServiceAccount) + if err != nil { + ginkgo.Fail("Cannot get test SA token. Cause: " + err.Error()) + } } config.DevK8sClient, err = client.NewK8sClientWithToken(kubeConfig, token) diff --git a/test/e2e/pkg/client/rbac.go b/test/e2e/pkg/client/rbac.go index e7458f52a..98ad1a314 100644 --- a/test/e2e/pkg/client/rbac.go +++ b/test/e2e/pkg/client/rbac.go @@ -22,6 +22,8 @@ import ( "log" "time" + v1 "k8s.io/api/authentication/v1" + corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" k8sErrors "k8s.io/apimachinery/pkg/api/errors" @@ -65,6 +67,24 @@ func (w *K8sClient) AssignRoleToSA(namespace, serviceAccount, role string) error return err } +func (w *K8sClient) CheckK8sVersion() (string, error) { + versionInfo, err := w.kubeClient.Discovery().ServerVersion() + if err != nil { + return "", err + } + return versionInfo.String(), nil +} + +func (w *K8sClient) CreateSAToken(namespace string, serviceAccountName string) (string, error) { + tokenRequest, err := w.kubeClient.CoreV1().ServiceAccounts(namespace).CreateToken(context.TODO(), serviceAccountName, &v1.TokenRequest{ + Spec: v1.TokenRequestSpec{}, + }, metav1.CreateOptions{}) + if err != nil { + return "", err + } + return tokenRequest.Status.Token, nil +} + // WaitSAToken waits until a secret with the token related to the specified SA // error is returned if token is not found after 10 seconds of tries func (w *K8sClient) WaitSAToken(namespace, serviceAccount string) (token string, err error) {