mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-07-27 18:42:40 +00:00
Snapshot tests can be run with Ginkgo focus "Snapshot" and restic tests with Ginkgo focus "Restic". Restic and volume snapshot tests can now be run simultaneously. Added check for kibishii app start after restore. Consolidated kibishii pod checks into waitForKibishiiPods. Added WaitForPods function to e2e/tests/common.goSnapshot tests are skipped automatically on kind clusters. Fixed issue where velero_utils InstallVeleroServer was looking for the Restic daemon set in the "velero" namespace only (was ignoring io.Namespace) Signed-off-by: Dave Smith-Uchida <dsmithuchida@vmware.com>
95 lines
3.1 KiB
Go
95 lines
3.1 KiB
Go
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os/exec"
|
|
"time"
|
|
|
|
corev1api "k8s.io/api/core/v1"
|
|
|
|
"github.com/pkg/errors"
|
|
"golang.org/x/net/context"
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/util/wait"
|
|
"k8s.io/client-go/kubernetes"
|
|
|
|
"github.com/vmware-tanzu/velero/pkg/builder"
|
|
)
|
|
|
|
// EnsureClusterExists returns whether or not a kubernetes cluster exists for tests to be run on.
|
|
func EnsureClusterExists(ctx context.Context) error {
|
|
return exec.CommandContext(ctx, "kubectl", "cluster-info").Run()
|
|
}
|
|
|
|
// CreateNamespace creates a kubernetes namespace
|
|
func CreateNamespace(ctx context.Context, client *kubernetes.Clientset, namespace string) error {
|
|
ns := builder.ForNamespace(namespace).Result()
|
|
_, err := client.CoreV1().Namespaces().Create(ctx, ns, metav1.CreateOptions{})
|
|
if apierrors.IsAlreadyExists(err) {
|
|
return nil
|
|
}
|
|
return err
|
|
}
|
|
|
|
// WaitForNamespaceDeletion Waits for namespace to be deleted.
|
|
func WaitForNamespaceDeletion(interval, timeout time.Duration, client *kubernetes.Clientset, ns string) error {
|
|
err := wait.PollImmediate(interval, timeout, func() (bool, error) {
|
|
_, err := client.CoreV1().Namespaces().Get(context.TODO(), ns, metav1.GetOptions{})
|
|
if err != nil {
|
|
if apierrors.IsNotFound(err) {
|
|
return true, nil
|
|
}
|
|
return false, err
|
|
}
|
|
fmt.Printf("Namespace %s is still being deleted...\n", ns)
|
|
return false, nil
|
|
})
|
|
return err
|
|
}
|
|
|
|
func CreateSecretFromFiles(ctx context.Context, client *kubernetes.Clientset, namespace string, name string, files map[string]string) error {
|
|
data := make(map[string][]byte)
|
|
|
|
for key, filePath := range files {
|
|
contents, err := ioutil.ReadFile(filePath)
|
|
if err != nil {
|
|
return errors.WithMessagef(err, "Failed to read secret file %q", filePath)
|
|
}
|
|
|
|
data[key] = contents
|
|
}
|
|
|
|
secret := builder.ForSecret(namespace, name).Data(data).Result()
|
|
_, err := client.CoreV1().Secrets(namespace).Create(ctx, secret, metav1.CreateOptions{})
|
|
return err
|
|
}
|
|
|
|
/*
|
|
Waits until all of the pods have gone to PodRunning state
|
|
*/
|
|
func WaitForPods(ctx context.Context, client *kubernetes.Clientset, namespace string, pods []string) error {
|
|
timeout := 10 * time.Minute
|
|
interval := 5 * time.Second
|
|
err := wait.PollImmediate(interval, timeout, func() (bool, error) {
|
|
for _, podName := range pods {
|
|
checkPod, err := client.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{})
|
|
if err != nil {
|
|
return false, errors.WithMessage(err, fmt.Sprintf("Failed to verify pod %s/%s is %s", namespace, podName, corev1api.PodRunning))
|
|
}
|
|
// If any pod is still waiting we don't need to check any more so return and wait for next poll interval
|
|
if checkPod.Status.Phase != corev1api.PodRunning {
|
|
fmt.Printf("Pod %s is in state %s waiting for it to be %s\n", podName, checkPod.Status.Phase, corev1api.PodRunning)
|
|
return false, nil
|
|
}
|
|
}
|
|
// All pods were in PodRunning state, we're successful
|
|
return true, nil
|
|
})
|
|
if err != nil {
|
|
return errors.Wrapf(err, fmt.Sprintf("Failed to wait for pods in namespace %s to start running", namespace))
|
|
}
|
|
return nil
|
|
}
|