Skip to content

Commit a5f3e7f

Browse files
Merge pull request #30 from ctrlplanedev/cleanup-vcluster-scan
chore: cleanup vcluster scan
2 parents a1e476c + 56c5ce7 commit a5f3e7f

File tree

1 file changed

+57
-41
lines changed

1 file changed

+57
-41
lines changed

cmd/ctrlc/root/sync/kubernetes/vcluster.go

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubernetes
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"strconv"
@@ -22,6 +23,26 @@ const (
2223
vclusterKind = "VCluster"
2324
)
2425

26+
func getParentClusterResource(ctx context.Context, ctrlplaneClient *api.ClientWithResponses, workspaceId string, clusterIdentifier string) (ClusterResource, error) {
27+
clusterResourceResponse, err := ctrlplaneClient.GetResourceByIdentifierWithResponse(ctx, workspaceId, clusterIdentifier)
28+
if err != nil {
29+
return ClusterResource{}, fmt.Errorf("failed to get cluster resource: %w", err)
30+
}
31+
if clusterResourceResponse.StatusCode() != 200 {
32+
return ClusterResource{}, fmt.Errorf("failed to get cluster resource: %s", clusterResourceResponse.Status())
33+
}
34+
clusterResource := ClusterResource{
35+
Config: clusterResourceResponse.JSON200.Config,
36+
Metadata: clusterResourceResponse.JSON200.Metadata,
37+
Name: clusterResourceResponse.JSON200.Name,
38+
Identifier: clusterResourceResponse.JSON200.Identifier,
39+
Kind: clusterResourceResponse.JSON200.Kind,
40+
Version: clusterResourceResponse.JSON200.Version,
41+
}
42+
43+
return clusterResource, nil
44+
}
45+
2546
func deepClone(src map[string]interface{}) (map[string]interface{}, error) {
2647
bytes, err := json.Marshal(src)
2748
if err != nil {
@@ -96,6 +117,38 @@ func generateVclusterConfig(vcluster find.VCluster, clusterName string, clusterC
96117
return clusterConfig
97118
}
98119

120+
type ClusterResource struct {
121+
Config map[string]interface{}
122+
Metadata api.MetadataMap
123+
Name string
124+
Identifier string
125+
Kind string
126+
Version string
127+
}
128+
129+
func getCreateResourceFromVcluster(vcluster find.VCluster, clusterResource ClusterResource) (api.CreateResource, error) {
130+
metadata, err := generateVclusterMetadata(vcluster, clusterResource.Metadata)
131+
if err != nil {
132+
return api.CreateResource{}, fmt.Errorf("failed to generate vcluster metadata: %w", err)
133+
}
134+
135+
clonedParentConfig, err := deepClone(clusterResource.Config)
136+
if err != nil {
137+
return api.CreateResource{}, fmt.Errorf("failed to clone parent config: %w", err)
138+
}
139+
140+
resource := api.CreateResource{
141+
Name: fmt.Sprintf("%s/%s/%s", clusterResource.Name, vcluster.Namespace, vcluster.Name),
142+
Identifier: fmt.Sprintf("%s/%s/vcluster/%s", clusterResource.Identifier, vcluster.Namespace, vcluster.Name),
143+
Kind: fmt.Sprintf("%s/%s", clusterResource.Kind, vclusterKind),
144+
Version: "ctrlplane.dev/kubernetes/cluster/v1",
145+
Metadata: metadata,
146+
Config: generateVclusterConfig(vcluster, clusterResource.Name, clonedParentConfig),
147+
}
148+
149+
return resource, nil
150+
}
151+
99152
func NewSyncVclusterCmd() *cobra.Command {
100153
var clusterIdentifier string
101154
var providerName string
@@ -107,7 +160,6 @@ func NewSyncVclusterCmd() *cobra.Command {
107160
$ ctrlc sync vcluster
108161
`),
109162
RunE: func(cmd *cobra.Command, args []string) error {
110-
111163
apiURL := viper.GetString("url")
112164
apiKey := viper.GetString("api-key")
113165
workspaceId := viper.GetString("workspace")
@@ -125,14 +177,10 @@ func NewSyncVclusterCmd() *cobra.Command {
125177
return fmt.Errorf("failed to create API client: %w", err)
126178
}
127179

128-
clusterResourceResponse, err := ctrlplaneClient.GetResourceByIdentifierWithResponse(cmd.Context(), workspaceId, clusterIdentifier)
180+
clusterResource, err := getParentClusterResource(cmd.Context(), ctrlplaneClient, workspaceId, clusterIdentifier)
129181
if err != nil {
130-
return fmt.Errorf("failed to get cluster resource: %w", err)
182+
return fmt.Errorf("failed to get parent cluster resource: %w", err)
131183
}
132-
if clusterResourceResponse.StatusCode() != 200 {
133-
return fmt.Errorf("failed to get cluster resource: %s", clusterResourceResponse.Status())
134-
}
135-
clusterResource := clusterResourceResponse.JSON200
136184

137185
config, context, err := getKubeConfig()
138186
if err != nil {
@@ -144,21 +192,6 @@ func NewSyncVclusterCmd() *cobra.Command {
144192
return fmt.Errorf("failed to create kube client: %w", err)
145193
}
146194

147-
allNamespaces, err := clientset.CoreV1().Namespaces().List(cmd.Context(), metav1.ListOptions{})
148-
if err != nil {
149-
return fmt.Errorf("failed to get all namespaces: %w", err)
150-
}
151-
for _, namespace := range allNamespaces.Items {
152-
fmt.Printf("Namespace: %s\n", namespace.Name)
153-
statefulSetList, err := clientset.AppsV1().StatefulSets(namespace.Name).List(cmd.Context(), metav1.ListOptions{})
154-
if err != nil {
155-
return fmt.Errorf("failed to get stateful sets for namespace %s: %w", namespace.Name, err)
156-
}
157-
for _, p := range statefulSetList.Items {
158-
fmt.Printf("StatefulSet: %s\n", p.Name)
159-
}
160-
}
161-
162195
namespace := metav1.NamespaceAll
163196
vclusters, err := find.ListOSSVClusters(cmd.Context(), clientset, context, "", namespace)
164197
if err != nil {
@@ -177,27 +210,10 @@ func NewSyncVclusterCmd() *cobra.Command {
177210
}
178211

179212
resourcesToUpsert := []api.CreateResource{}
180-
181213
for _, vcluster := range vclusters {
182-
metadata, err := generateVclusterMetadata(vcluster, clusterResource.Metadata)
183-
if err != nil {
184-
fmt.Printf("failed to generate vcluster metadata for %s: %v\n", vcluster.Name, err)
185-
continue
186-
}
187-
188-
clonedParentConfig, err := deepClone(clusterResource.Config)
214+
resource, err := getCreateResourceFromVcluster(vcluster, clusterResource)
189215
if err != nil {
190-
fmt.Printf("failed to clone parent config for %s: %v\n", vcluster.Name, err)
191-
continue
192-
}
193-
194-
resource := api.CreateResource{
195-
Name: fmt.Sprintf("%s/%s/%s", clusterResource.Name, vcluster.Namespace, vcluster.Name),
196-
Identifier: fmt.Sprintf("%s/%s/vcluster/%s", clusterResource.Identifier, vcluster.Namespace, vcluster.Name),
197-
Kind: fmt.Sprintf("%s/%s", clusterResource.Kind, vclusterKind),
198-
Version: "ctrlplane.dev/kubernetes/cluster/v1",
199-
Metadata: metadata,
200-
Config: generateVclusterConfig(vcluster, clusterResource.Name, clonedParentConfig),
216+
return fmt.Errorf("failed to get create resource from vcluster: %w", err)
201217
}
202218
resourcesToUpsert = append(resourcesToUpsert, resource)
203219
}

0 commit comments

Comments
 (0)