From b544c17472d56091b5ef1cd770841cb05e3744f3 Mon Sep 17 00:00:00 2001 From: jose luis <2064537+sosan@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:38:12 +0100 Subject: [PATCH] fix issue 1778 * fix issue https://github.com/kubernetes/kompose/issues/1778 *add tests with hardcoded values to mokup file access Signed-off-by: jose luis <2064537+sosan@users.noreply.github.com> --- pkg/transformer/kubernetes/k8sutils.go | 12 ++++ pkg/transformer/kubernetes/kubernetes.go | 3 +- pkg/transformer/kubernetes/kubernetes_test.go | 65 +++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/pkg/transformer/kubernetes/k8sutils.go b/pkg/transformer/kubernetes/k8sutils.go index 49510ec8..b6bc46fd 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -946,3 +946,15 @@ func GetContainerArgs(service kobject.ServiceConfig) []string { } return args } + +// GetFileName extracts the file name from a given file path or file name. +// If the input fileName contains a "/", it retrieves the substring after the last "/". +// The function does not format the file name further, as it may contain periods or other valid characters. +// Returns the extracted file name. +func GetFileName(fileName string) string { + if strings.Contains(fileName, "/") { + fileName = fileName[strings.LastIndex(fileName, "/")+1:] + } + // Not format filename because can begin with .fileName + return fileName +} diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index f5b61971..7a893c7f 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -582,6 +582,7 @@ func (k *Kubernetes) CreateSecrets(komposeObject kobject.KomposeObject) ([]*api. return nil, err } data := []byte(dataString) + fileName := GetFileName(config.File) secret := &api.Secret{ TypeMeta: metav1.TypeMeta{ Kind: "Secret", @@ -592,7 +593,7 @@ func (k *Kubernetes) CreateSecrets(komposeObject kobject.KomposeObject) ([]*api. Labels: transformer.ConfigLabels(name), }, Type: api.SecretTypeOpaque, - Data: map[string][]byte{name: data}, + Data: map[string][]byte{fileName: data}, } objects = append(objects, secret) } else { diff --git a/pkg/transformer/kubernetes/kubernetes_test.go b/pkg/transformer/kubernetes/kubernetes_test.go index ef1a0053..e5153322 100644 --- a/pkg/transformer/kubernetes/kubernetes_test.go +++ b/pkg/transformer/kubernetes/kubernetes_test.go @@ -1145,3 +1145,68 @@ func TestNamespaceGenerationBlank(t *testing.T) { } } } + +func TestKubernetes_CreateSecrets(t *testing.T) { + // hardcoded + komposeDefaultObject := kobject.KomposeObject{ + ServiceConfigs: map[string]kobject.ServiceConfig{"app": newServiceConfig()}, + Secrets: types.Secrets{ + "config-ini": types.SecretConfig{ + Name: "debug-config-ini", + File: "../../../docs/CNAME", + }, + }, + } + + type fields struct { + Opt kobject.ConvertOptions + } + type args struct { + komposeObject kobject.KomposeObject + } + + tests := []struct { + name string + fields fields + args args + want []*api.Secret + wantErr bool + }{ + // TODO: Add test cases. + { + name: "CreateSecrets from default KomposeObject amd hardcoded secrets", + args: args{ + komposeObject: komposeDefaultObject, + }, + want: []*api.Secret{ + { + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: FormatResourceName("config-ini"), + Labels: transformer.ConfigLabels("config-ini"), + }, + Type: api.SecretTypeOpaque, + Data: map[string][]byte{"CNAME": []byte("kompose.io")}, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + k := &Kubernetes{ + Opt: tt.fields.Opt, + } + got, err := k.CreateSecrets(tt.args.komposeObject) + if (err != nil) != tt.wantErr { + t.Errorf("Kubernetes.CreateSecrets() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("Kubernetes.CreateSecrets() = %v, want %v", got, tt.want) + } + }) + } +}