...
1 package mapper
2
3 import (
4 "fmt"
5 "regexp"
6 "strings"
7
8 corev1 "k8s.io/api/core/v1"
9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11 "k8s.io/apimachinery/pkg/runtime"
12
13 "edge-infra.dev/pkg/edge/api/graph/model"
14 "edge-infra.dev/pkg/edge/api/utils"
15 metastatus "edge-infra.dev/pkg/k8s/meta/status"
16 )
17
18 func ToClusterKubeConfig(secret *corev1.Secret, endpoint string) *model.ClusterKubeconfig {
19 if len(secret.Data["kubeconfig.yaml"]) > 0 {
20 return ToClusterKubeConfigString(string(secret.Data["kubeconfig.yaml"]), endpoint)
21 }
22 return &model.ClusterKubeconfig{
23 ClusterKubeConfig: "",
24 RedactedClusterKubeConfig: "",
25 }
26 }
27
28 func ToClusterKubeConfigString(kubeConfig string, endpoint string) *model.ClusterKubeconfig {
29 var redactedClusterKubeConfigBytes []byte
30 if endpoint != "" {
31 kubeConfig = strings.ReplaceAll(kubeConfig, "localhost", endpoint)
32 kubeConfig = strings.ReplaceAll(kubeConfig, "127.0.0.1", endpoint)
33 }
34
35
36 certRegex := regexp.MustCompile(`data: ([\s\S]*?[\r?\n])`)
37 redactedClusterKubeConfigBytes = certRegex.ReplaceAll([]byte(kubeConfig), []byte(`data: **********
38 `))
39
40
41 passwordRegex := regexp.MustCompile(`password: ([\s\S]*?) username`)
42 redactedClusterKubeConfigBytes = passwordRegex.ReplaceAll(redactedClusterKubeConfigBytes, []byte(`password: **********
43 username`))
44 return &model.ClusterKubeconfig{
45 ClusterKubeConfig: kubeConfig,
46 RedactedClusterKubeConfig: string(redactedClusterKubeConfigBytes),
47 }
48 }
49
50 func ToStoreStatusModel(name, bannerEdgeID string, kubeVersion *string, status *model.ClusterStatus) *model.StoreStatusInfo {
51 storeStatus := &model.StoreStatusInfo{
52 Name: name,
53 BannerEdgeID: bannerEdgeID,
54 Status: status,
55 KubeVersion: kubeVersion,
56 }
57 return storeStatus
58 }
59
60 func ToConvertUnstructuredToConfigMap(resource *unstructured.Unstructured) (*corev1.ConfigMap, error) {
61 converted := &corev1.ConfigMap{}
62 err := runtime.DefaultUnstructuredConverter.
63 FromUnstructured(resource.UnstructuredContent(), &converted)
64 if err != nil {
65 fmt.Print(err)
66 return &corev1.ConfigMap{}, err
67 }
68 return converted, nil
69 }
70
71 func ToConvertUnstructuredToNode(resources *unstructured.UnstructuredList) ([]corev1.Node, error) {
72 resp := make([]corev1.Node, 0)
73 for _, item := range resources.Items {
74 converted := &corev1.Node{}
75 err := runtime.DefaultUnstructuredConverter.
76 FromUnstructured(item.UnstructuredContent(), &converted)
77 if err != nil {
78 return nil, err
79 }
80 resp = append(resp, *converted)
81 }
82
83 return resp, nil
84 }
85
86 func ToStoreClusterStatus(conditions []metav1.Condition, successCondition string, progressingReasons []string) (bool, *model.ClusterStatus) {
87 if ready, reason, message := isResourceReady(conditions, successCondition); !ready {
88 if utils.Contains(progressingReasons, reason) {
89 return false, &model.ClusterStatus{Status: Provisioning, Message: message}
90 }
91 return false, &model.ClusterStatus{Status: ProvisioningError, Message: message}
92 }
93 return true, &model.ClusterStatus{Status: metastatus.ReadyCondition, Message: "the cluster is ready"}
94 }
95
View as plain text