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 1/3] 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) + } + }) + } +} From b095982ddf7b5cd86b17395ce7e8daf5f56eb096 Mon Sep 17 00:00:00 2001 From: jose luis <2064537+sosan@users.noreply.github.com> Date: Wed, 7 Feb 2024 18:29:33 +0100 Subject: [PATCH 2/3] adds a unit test for the TestKubernetes_CreateSecrets function where secrets are created in Kubernetes from a KomposeObject, and secrets are taken from a CNAME file. Also, a newSecrets function is added to generate secrets from the provided configuration Signed-off-by: jose luis <2064537+sosan@users.noreply.github.com> --- pkg/transformer/kubernetes/kubernetes_test.go | 69 +++++++++++++++---- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/pkg/transformer/kubernetes/kubernetes_test.go b/pkg/transformer/kubernetes/kubernetes_test.go index e5153322..362591f0 100644 --- a/pkg/transformer/kubernetes/kubernetes_test.go +++ b/pkg/transformer/kubernetes/kubernetes_test.go @@ -1147,15 +1147,23 @@ 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", - }, + var komposeDefaultObject []kobject.KomposeObject + dataSecrets := []SecretsConfig{ + { + nameSecretConfig: "config-ini", + nameSecret: "debug-config-ini", + pathFile: "../../../docs/CNAME", }, + { + nameSecretConfig: "new-config-init", + nameSecret: "new-debug-config-ini", + pathFile: "../../../docs/CNAME", + }, + } + + for i := 0; i < len(dataSecrets); i++ { + komposeDefaultObject = append(komposeDefaultObject, newKomposeObject()) + komposeDefaultObject[i].Secrets = newSecrets(dataSecrets[i]) } type fields struct { @@ -1172,11 +1180,10 @@ func TestKubernetes_CreateSecrets(t *testing.T) { want []*api.Secret wantErr bool }{ - // TODO: Add test cases. { - name: "CreateSecrets from default KomposeObject amd hardcoded secrets", + name: "CreateSecrets from default KomposeObject and secrets taken from CNAME file", args: args{ - komposeObject: komposeDefaultObject, + komposeObject: komposeDefaultObject[0], }, want: []*api.Secret{ { @@ -1185,8 +1192,28 @@ func TestKubernetes_CreateSecrets(t *testing.T) { APIVersion: "v1", }, ObjectMeta: metav1.ObjectMeta{ - Name: FormatResourceName("config-ini"), - Labels: transformer.ConfigLabels("config-ini"), + Name: FormatResourceName(dataSecrets[0].nameSecretConfig), + Labels: transformer.ConfigLabels(dataSecrets[0].nameSecretConfig), + }, + Type: api.SecretTypeOpaque, + Data: map[string][]byte{"CNAME": []byte("kompose.io")}, + }, + }, + }, + { + name: "CreateSecrets from default KomposeObject and secrets taken from CNAME file", + args: args{ + komposeObject: komposeDefaultObject[1], + }, + want: []*api.Secret{ + { + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: FormatResourceName(dataSecrets[1].nameSecretConfig), + Labels: transformer.ConfigLabels(dataSecrets[1].nameSecretConfig), }, Type: api.SecretTypeOpaque, Data: map[string][]byte{"CNAME": []byte("kompose.io")}, @@ -1210,3 +1237,19 @@ func TestKubernetes_CreateSecrets(t *testing.T) { }) } } + +type SecretsConfig struct { + nameSecretConfig string + nameSecret string + pathFile string +} + +// generate +func newSecrets(stringsSecretConfig SecretsConfig) types.Secrets { + return types.Secrets{ + stringsSecretConfig.nameSecretConfig: types.SecretConfig{ + Name: stringsSecretConfig.nameSecret, + File: stringsSecretConfig.pathFile, + }, + } +} From 6ce08bb234baef29434e9ff491c7fd02d6c1ef1d Mon Sep 17 00:00:00 2001 From: jose luis <2064537+sosan@users.noreply.github.com> Date: Wed, 7 Feb 2024 19:36:49 +0100 Subject: [PATCH 3/3] merged from main and dummy coments --- pkg/transformer/kubernetes/kubernetes_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/transformer/kubernetes/kubernetes_test.go b/pkg/transformer/kubernetes/kubernetes_test.go index 362591f0..2d44bbfc 100644 --- a/pkg/transformer/kubernetes/kubernetes_test.go +++ b/pkg/transformer/kubernetes/kubernetes_test.go @@ -1238,13 +1238,14 @@ func TestKubernetes_CreateSecrets(t *testing.T) { } } +// struct defines the configuration parameters required for creating a secret type SecretsConfig struct { nameSecretConfig string nameSecret string pathFile string } -// generate +// creates a new instance of types.Secrets based on the provided SecretsConfig parameter func newSecrets(stringsSecretConfig SecretsConfig) types.Secrets { return types.Secrets{ stringsSecretConfig.nameSecretConfig: types.SecretConfig{