From c794d7b18eaf47c7db2960b38f1ad9867b71f69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Sch=C3=BCnemann?= Date: Tue, 16 Sep 2025 10:36:27 +0200 Subject: [PATCH 1/2] only apply kustomization manifest --- .../deployment-repo/deploymentRepoManager.go | 18 ++++++++-- .../deploymentRepoManager_test.go | 35 ++++--------------- internal/util/kubernetes.go | 9 +++-- 3 files changed, 25 insertions(+), 37 deletions(-) diff --git a/internal/deployment-repo/deploymentRepoManager.go b/internal/deployment-repo/deploymentRepoManager.go index a4582ce..e5a777c 100644 --- a/internal/deployment-repo/deploymentRepoManager.go +++ b/internal/deployment-repo/deploymentRepoManager.go @@ -1,6 +1,7 @@ package deploymentrepo import ( + "bytes" "context" "fmt" "io" @@ -592,11 +593,22 @@ func (m *DeploymentRepoManager) RunKustomizeAndApply(ctx context.Context) error return fmt.Errorf("failed to convert kustomized resources to YAML: %w", err) } - logger.Infof("Applying kustomized resources to target cluster") - err = util.ApplyManifests(ctx, m.TargetCluster, resourcesYAML) + reader := bytes.NewReader(resourcesYAML) + manifests, err := util.ParseManifests(reader) if err != nil { - return fmt.Errorf("failed to apply kustomized resources to cluster: %w", err) + return fmt.Errorf("failed to parse kustomized resources: %w", err) } + + for _, manifest := range manifests { + if manifest.GetKind() == "Kustomization" && strings.Contains(manifest.GetAPIVersion(), "kustomize.toolkit.fluxcd.io") { + logger.Infof("Applying Kustomization manifest: %s/%s", manifest.GetNamespace(), manifest.GetName()) + err = util.ApplyUnstructuredObject(ctx, m.TargetCluster, manifest) + if err != nil { + return fmt.Errorf("failed to apply Kustomization manifest %s/%s: %w", manifest.GetNamespace(), manifest.GetName(), err) + } + } + } + return nil } diff --git a/internal/deployment-repo/deploymentRepoManager_test.go b/internal/deployment-repo/deploymentRepoManager_test.go index dd7a0a7..3bc3b84 100644 --- a/internal/deployment-repo/deploymentRepoManager_test.go +++ b/internal/deployment-repo/deploymentRepoManager_test.go @@ -121,38 +121,15 @@ func TestDeploymentRepoManager(t *testing.T) { testutils.AssertDirectoriesEqualWithNormalization(t, expectedRepoDir, actualRepoDir, createGitRepoNormalizer(originDir)) - clusterProviderTest := &unstructured.Unstructured{} - clusterProviderTest.SetGroupVersionKind(schema.GroupVersionKind{ - Group: "openmcp.cloud", - Version: "v1alpha1", - Kind: "ClusterProvider", + fluxKustomization := &unstructured.Unstructured{} + fluxKustomization.SetGroupVersionKind(schema.GroupVersionKind{ + Group: "kustomize.toolkit.fluxcd.io", + Version: "v1", + Kind: "Kustomization", }) - err = platformClient.Get(t.Context(), client.ObjectKey{Name: "test"}, clusterProviderTest) + err = platformClient.Get(t.Context(), client.ObjectKey{Name: "bootstrap", Namespace: "default"}, fluxKustomization) assert.NoError(t, err) - assert.Equal(t, "test", clusterProviderTest.GetName()) - - serviceProviderTest := &unstructured.Unstructured{} - serviceProviderTest.SetGroupVersionKind(schema.GroupVersionKind{ - Group: "openmcp.cloud", - Version: "v1alpha1", - Kind: "ServiceProvider", - }) - - err = platformClient.Get(t.Context(), client.ObjectKey{Name: "test"}, serviceProviderTest) - assert.NoError(t, err) - assert.Equal(t, "test", serviceProviderTest.GetName()) - - platformServiceTest := &unstructured.Unstructured{} - platformServiceTest.SetGroupVersionKind(schema.GroupVersionKind{ - Group: "openmcp.cloud", - Version: "v1alpha1", - Kind: "PlatformService", - }) - - err = platformClient.Get(t.Context(), client.ObjectKey{Name: "test"}, platformServiceTest) - assert.NoError(t, err) - assert.Equal(t, "test", platformServiceTest.GetName()) } // CreateGitRepoNormalizer creates a normalizer function that replaces dynamic git repository URLs diff --git a/internal/util/kubernetes.go b/internal/util/kubernetes.go index 5b8cd1a..ba4af7c 100644 --- a/internal/util/kubernetes.go +++ b/internal/util/kubernetes.go @@ -58,17 +58,16 @@ func createCluster(kubeconfigPath, id string, scheme *runtime.Scheme) (*clusters } func ApplyManifests(ctx context.Context, cluster *clusters.Cluster, manifests []byte) error { - // Parse manifests into unstructured objects reader := bytes.NewReader(manifests) - unstructuredObjects, err := parseManifests(reader) + unstructuredObjects, err := ParseManifests(reader) if err != nil { return fmt.Errorf("error parsing manifests: %w", err) } // Apply objects to the platform cluster for _, u := range unstructuredObjects { - if err = applyUnstructuredObject(ctx, cluster, u); err != nil { + if err = ApplyUnstructuredObject(ctx, cluster, u); err != nil { return err } } @@ -76,7 +75,7 @@ func ApplyManifests(ctx context.Context, cluster *clusters.Cluster, manifests [] return nil } -func parseManifests(reader io.Reader) ([]*unstructured.Unstructured, error) { +func ParseManifests(reader io.Reader) ([]*unstructured.Unstructured, error) { decoder := yaml.NewYAMLOrJSONDecoder(reader, 4096) var result []*unstructured.Unstructured for { @@ -96,7 +95,7 @@ func parseManifests(reader io.Reader) ([]*unstructured.Unstructured, error) { return result, nil } -func applyUnstructuredObject(ctx context.Context, cluster *clusters.Cluster, u *unstructured.Unstructured) error { +func ApplyUnstructuredObject(ctx context.Context, cluster *clusters.Cluster, u *unstructured.Unstructured) error { logger := log.GetLogger() objectKey := client.ObjectKeyFromObject(u) objectLogString := fmt.Sprintf("%s %s", u.GetObjectKind().GroupVersionKind().String(), objectKey.String()) From ebcfbe5f298f49629a7af981ff00cbe14fc7abe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Sch=C3=BCnemann?= Date: Tue, 16 Sep 2025 10:36:41 +0200 Subject: [PATCH 2/2] feat: release v0.1.1 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 0a02a01..a1c2c6a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.1.0-dev \ No newline at end of file +v0.1.1 \ No newline at end of file