mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
71 lines
2.3 KiB
Go
71 lines
2.3 KiB
Go
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"golang.org/x/xerrors"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
|
|
"github.com/gitpod-io/gitpod/common-go/log"
|
|
)
|
|
|
|
// GetIntegrationTestClient provides a kubernetes client for integration tests
|
|
func GetIntegrationTestClient(kubecfgfn string) (client kubernetes.Interface, namespace string, err error) {
|
|
var kubeconfig string
|
|
switch kubecfgfn {
|
|
case "disabled":
|
|
return
|
|
case "local":
|
|
var home string
|
|
home, err = os.UserHomeDir()
|
|
if err != nil {
|
|
err = xerrors.Errorf("cannot determine user home dir: %w", err)
|
|
return
|
|
}
|
|
kubeconfig = filepath.Join(home, ".kube", "config")
|
|
default:
|
|
kubeconfig = kubecfgfn
|
|
}
|
|
|
|
cfg := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig},
|
|
&clientcmd.ConfigOverrides{},
|
|
)
|
|
namespace, _, err = cfg.Namespace()
|
|
if err != nil {
|
|
err = xerrors.Errorf("cannot get namespace from kubeconfig: %w", err)
|
|
return
|
|
}
|
|
|
|
res, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
|
|
if err != nil {
|
|
err = xerrors.Errorf("cannot build kubeconfig: %w", err)
|
|
return
|
|
}
|
|
|
|
client = kubernetes.NewForConfigOrDie(res)
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
ps, err := client.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{LabelSelector: "component=ws-manager"})
|
|
if err != nil {
|
|
log.WithError(err).Warn("cannot ensure there's no ws-manager running - test may fail inexplicably")
|
|
}
|
|
if len(ps.Items) > 0 {
|
|
err = xerrors.Errorf("there's a ws-manager running in the namespace %s - this would break the tests. Please scale down that ws-manager prior to running the test (kubectl scale --replicas=0 --namespace=%s deployment/ws-manager)", namespace, namespace)
|
|
return
|
|
}
|
|
|
|
_ = client.CoreV1().Pods(namespace).DeleteCollection(ctx, *metav1.NewDeleteOptions(30), metav1.ListOptions{LabelSelector: "component=workspace"})
|
|
_ = client.CoreV1().ConfigMaps(namespace).DeleteCollection(ctx, *metav1.NewDeleteOptions(30), metav1.ListOptions{LabelSelector: "component=workspace"})
|
|
|
|
return
|
|
}
|