diff --git a/pkg/transformer/kubernetes/k8sutils.go b/pkg/transformer/kubernetes/k8sutils.go index b1f06834..ab1231a9 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -959,3 +959,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 a939536b..397ee1ea 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..2d44bbfc 100644 --- a/pkg/transformer/kubernetes/kubernetes_test.go +++ b/pkg/transformer/kubernetes/kubernetes_test.go @@ -1145,3 +1145,112 @@ func TestNamespaceGenerationBlank(t *testing.T) { } } } + +func TestKubernetes_CreateSecrets(t *testing.T) { + 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 { + Opt kobject.ConvertOptions + } + type args struct { + komposeObject kobject.KomposeObject + } + + tests := []struct { + name string + fields fields + args args + want []*api.Secret + wantErr bool + }{ + { + name: "CreateSecrets from default KomposeObject and secrets taken from CNAME file", + args: args{ + komposeObject: komposeDefaultObject[0], + }, + want: []*api.Secret{ + { + TypeMeta: metav1.TypeMeta{ + Kind: "Secret", + APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + 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")}, + }, + }, + }, + } + 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) + } + }) + } +} + +// struct defines the configuration parameters required for creating a secret +type SecretsConfig struct { + nameSecretConfig string + nameSecret string + pathFile string +} + +// 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{ + Name: stringsSecretConfig.nameSecret, + File: stringsSecretConfig.pathFile, + }, + } +}