From 0b946e1421a8a24c4683679375fdd1fbafede9ee Mon Sep 17 00:00:00 2001 From: Venkatreddy KP Date: Sat, 4 May 2024 17:30:32 +0530 Subject: [PATCH] fix cluster secret store create on business cluster --- capten/common-pkg/k8s/dynamic_client.go | 43 +++++++++++++------ capten/common-pkg/k8s/external_secret.go | 6 +-- .../crossplane/config_cluster_secrets.go | 2 +- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/capten/common-pkg/k8s/dynamic_client.go b/capten/common-pkg/k8s/dynamic_client.go index c5629b34..c70bc9d2 100644 --- a/capten/common-pkg/k8s/dynamic_client.go +++ b/capten/common-pkg/k8s/dynamic_client.go @@ -50,17 +50,18 @@ func (dc *DynamicClientSet) GetNameNamespace(jsonByte []byte) (string, string, e metadataObj, convCheck := keyValue["metadata"].(map[string]interface{}) if !convCheck { - return "", "", fmt.Errorf("failed to convert the metadata togo struct type") + return "", "", fmt.Errorf("failed to convert the metadata to go struct type") } - namespaceName, convCheck := metadataObj["namespace"].(string) + var namespaceName string + namespaceName, convCheck = metadataObj["namespace"].(string) if !convCheck { - return "", "", fmt.Errorf("failed to convert the metadata togo struct type") + fmt.Println("namespace not found") } resourceName, convCheck := metadataObj["name"].(string) if !convCheck { - return "", "", fmt.Errorf("failed to convert the metadata togo struct type") + return "", "", fmt.Errorf("failed to convert the name to go struct type") } return namespaceName, resourceName, nil @@ -91,10 +92,10 @@ func (dc *DynamicClientSet) CreateResourceFromFile(ctx context.Context, filename return "", "", err } - return dc.CreateResource(ctx, data) + return dc.CreateResource(ctx, data, false) } -func (dc *DynamicClientSet) CreateResource(ctx context.Context, data []byte) (string, string, error) { +func (dc *DynamicClientSet) CreateResource(ctx context.Context, data []byte, clusterResource bool) (string, string, error) { jsonData, err := ConvertYamlToJson(data) if err != nil { return "", "", err @@ -110,16 +111,30 @@ func (dc *DynamicClientSet) CreateResource(ctx context.Context, data []byte) (st return "", "", err } - _, err = dc.client.Resource(resourceID).Namespace(namespaceName).Get(ctx, resourceName, metav1.GetOptions{}) - if err != nil { - if k8serrors.IsNotFound(err) { - _, err := dc.client.Resource(resourceID).Namespace(namespaceName).Create(ctx, obj, metav1.CreateOptions{}) - if err != nil { - return "", "", fmt.Errorf("error in creating resource %s/%s, %v", namespaceName, resourceName, err) + if !clusterResource { + _, err = dc.client.Resource(resourceID).Namespace(namespaceName).Get(ctx, resourceName, metav1.GetOptions{}) + if err != nil { + if k8serrors.IsNotFound(err) { + _, err := dc.client.Resource(resourceID).Namespace(namespaceName).Create(ctx, obj, metav1.CreateOptions{}) + if err != nil { + return "", "", fmt.Errorf("error in creating resource %s/%s, %v", namespaceName, resourceName, err) + } + return namespaceName, resourceName, nil } - return namespaceName, resourceName, nil + return "", "", err + } + } else { + _, err = dc.client.Resource(resourceID).Get(ctx, resourceName, metav1.GetOptions{}) + if err != nil { + if k8serrors.IsNotFound(err) { + _, err := dc.client.Resource(resourceID).Create(ctx, obj, metav1.CreateOptions{}) + if err != nil { + return "", "", fmt.Errorf("error in creating resource %s/%s, %v", namespaceName, resourceName, err) + } + return namespaceName, resourceName, nil + } + return "", "", err } - return "", "", err } return namespaceName, resourceName, nil } diff --git a/capten/common-pkg/k8s/external_secret.go b/capten/common-pkg/k8s/external_secret.go index dbc50827..79a8cfff 100644 --- a/capten/common-pkg/k8s/external_secret.go +++ b/capten/common-pkg/k8s/external_secret.go @@ -117,9 +117,9 @@ func (k *K8SClient) CreateOrUpdateSecretStore(ctx context.Context, secretStoreNa if err != nil { return } - _, _, err = k.DynamicClient.CreateResource(ctx, []byte(secretStoreData)) + _, _, err = k.DynamicClient.CreateResource(ctx, []byte(secretStoreData), true) if err != nil { - err = fmt.Errorf("failed to create cluter vault token secret %s/%s, %v", namespace, secretStoreName, err) + err = fmt.Errorf("failed to create cluter secret store %s/%s, %v", namespace, secretStoreName, err) return } return @@ -164,7 +164,7 @@ func (k *K8SClient) CreateOrUpdateExternalSecret(ctx context.Context, externalSe return } - _, _, err = k.DynamicClient.CreateResource(ctx, []byte(externalSecretData)) + _, _, err = k.DynamicClient.CreateResource(ctx, []byte(externalSecretData), false) if err != nil { err = fmt.Errorf("failed to create vault external secret %s/%s, %v", namespace, externalSecretName, err) return diff --git a/capten/config-worker/internal/crossplane/config_cluster_secrets.go b/capten/config-worker/internal/crossplane/config_cluster_secrets.go index e9f1c5ff..18f0fd2f 100644 --- a/capten/config-worker/internal/crossplane/config_cluster_secrets.go +++ b/capten/config-worker/internal/crossplane/config_cluster_secrets.go @@ -48,7 +48,7 @@ func (cp *CrossPlaneApp) configureExternalSecretsOnCluster(ctx context.Context, err = k8sclient.CreateOrUpdateSecretStore(ctx, secretStoreName, namespace, vaultAddressStr, vaultAppRoleTokenSecret, "token") if err != nil { - return fmt.Errorf("failed to create cluter vault token secret, %v", err) + return fmt.Errorf("failed to create secret store %s, %v", secretStoreName, err) } logger.Infof("created %s on cluster cluster %s", secretStoreName, secretStoreName, clusterName)