package utils
import (
"context"
"fmt"
"strings"
"gitcode.com/openFuyao/e2e-auto-test/e2e/framework/executor"
"gitcode.com/openFuyao/e2e-auto-test/e2e/framework/k8s"
podFunc "gitcode.com/openFuyao/e2e-auto-test/e2e/framework/pod"
MultiClusterConfig "gitcode.com/openFuyao/e2e-auto-test/e2e/multi-cluster-service/system-integration/multi-cluster-config"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func SystemReboot(sshClient *executor.SSHExecutor, reboot_time int) error {
cmd := fmt.Sprintf("shutdown -r +%d", reboot_time)
_, err := sshClient.Exec(cmd)
if err != nil {
return fmt.Errorf("reboot command execute failed : %v", err)
}
return nil
}
func MCSInstallationCheck(k8sClient *k8s.K8SClient, ctx context.Context) (bool, error) {
mcsPodMap := map[string]int{
"etcd": 0,
"karmada-aggregated-apiserver": 0,
"karmada-apiserver": 0,
"karmada-controller-manager": 0,
"karmada-kube-controller-manager": 0,
"karmada-scheduler": 0,
"karmada-webhook": 0,
"multi-cluster-website": 0,
"multicluster-service": 0,
}
pods, err := k8sClient.ListPods(ctx, "karmada-system", metav1.ListOptions{})
if err != nil {
return false, fmt.Errorf("get pod failed: %v", err)
}
if len(pods.Items) == 0 {
return false, fmt.Errorf("no pods in namespace karmada-system")
}
for _, pod := range pods.Items {
if strings.Contains(pod.Name, "etcd") {
mcsPodMap["etcd"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("etcd pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-aggregated-apiserver") {
mcsPodMap["karmada-aggregated-apiserver"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-aggregated-apiserver pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-apiserver") {
mcsPodMap["karmada-apiserver"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-apiserver pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-controller-manager") {
mcsPodMap["karmada-controller-manager"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-controller-manager pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-kube-controller-manager") {
mcsPodMap["karmada-kube-controller-manager"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-kube-controller-manager pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-scheduler") {
mcsPodMap["karmada-scheduler"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-scheduler pod not ready")
}
}
if strings.Contains(pod.Name, "karmada-webhook") {
mcsPodMap["karmada-webhook"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("karmada-webhook pod not ready")
}
}
if strings.Contains(pod.Name, "multi-cluster-website") {
mcsPodMap["multi-cluster-website"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("multi-cluster-website pod not ready")
}
imageStatus := podFunc.ImageCheck(pod, []string{MultiClusterConfig.ImageMultiClusterWebsite})
if !imageStatus {
return false, fmt.Errorf("multi-cluster-website pod got wrong image")
}
}
if strings.Contains(pod.Name, "multicluster-service") {
mcsPodMap["multicluster-service"] += 1
podStatus := podFunc.VerifyPodStatus(pod)
if !podStatus {
return false, fmt.Errorf("multicluster-service pod not ready")
}
imageStatus := podFunc.ImageCheck(pod, []string{MultiClusterConfig.ImageMultiClusterService})
if !imageStatus {
return false, fmt.Errorf("multicluster-service pod got wrong image")
}
}
}
for k, v := range mcsPodMap {
if v == 0 {
return false, fmt.Errorf("%s pod does not been created", k)
}
}
return true, nil
}