diff --git a/cmd/convert.go b/cmd/convert.go index c2972f55..74a3b8aa 100644 --- a/cmd/convert.go +++ b/cmd/convert.go @@ -46,6 +46,7 @@ var ( ConvertDeploymentConfig bool ConvertReplicas int ConvertController string + ConvertProfiles []string ConvertPushImage bool ConvertNamespace string ConvertPushImageRegistry string @@ -115,6 +116,7 @@ var convertCmd = &cobra.Command{ IsReplicaSetFlag: cmd.Flags().Lookup("replicas").Changed, IsDeploymentConfigFlag: cmd.Flags().Lookup("deployment-config").Changed, YAMLIndent: ConvertYAMLIndent, + Profiles: ConvertProfiles, WithKomposeAnnotation: WithKomposeAnnotation, MultipleContainerMode: MultipleContainerMode, ServiceGroupMode: ServiceGroupMode, @@ -199,6 +201,8 @@ func init() { convertCmd.Flags().IntVar(&ConvertYAMLIndent, "indent", 2, "Spaces length to indent generated yaml files") + convertCmd.Flags().StringArrayVar(&ConvertProfiles, "profile", []string{}, `Specify the profile to use, can use multiple.`) + // In order to 'separate' both OpenShift and Kubernetes only flags. A custom help page is created customHelp := `Usage:{{if .Runnable}} {{if .HasAvailableFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasAvailableSubCommands}} diff --git a/output.yaml b/output.yaml new file mode 100644 index 00000000..e69de29b diff --git a/pkg/app/app.go b/pkg/app/app.go index 25a930a1..918f66f9 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -217,7 +217,7 @@ func Convert(opt kobject.ConvertOptions) ([]runtime.Object, error) { komposeObject := kobject.KomposeObject{ ServiceConfigs: make(map[string]kobject.ServiceConfig), } - komposeObject, err = l.LoadFile(opt.InputFiles) + komposeObject, err = l.LoadFile(opt.InputFiles, opt.Profiles) if err != nil { log.Fatalf(err.Error()) } diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index 525008c5..37446e7d 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -53,6 +53,7 @@ type ConvertOptions struct { BuildRepo string BuildBranch string Build string + Profiles []string PushImage bool PushImageRegistry string CreateChart bool @@ -117,6 +118,7 @@ type ServiceConfig struct { Args []string `compose:"args"` VolList []string `compose:"volumes"` Network []string `compose:"network"` + Profiles []string `compose:"profiles"` Labels map[string]string `compose:"labels"` Annotations map[string]string `compose:""` CPUSet string `compose:"cpuset"` diff --git a/pkg/loader/compose/compose.go b/pkg/loader/compose/compose.go index 97396243..6998e3ae 100644 --- a/pkg/loader/compose/compose.go +++ b/pkg/loader/compose/compose.go @@ -149,14 +149,19 @@ func checkUnsupportedKey(composeProject *types.Project) []string { } // LoadFile loads a compose file into KomposeObject -func (c *Compose) LoadFile(files []string) (kobject.KomposeObject, error) { +func (c *Compose) LoadFile(files []string, profiles []string) (kobject.KomposeObject, error) { // Gather the working directory workingDir, err := getComposeFileDir(files) if err != nil { return kobject.KomposeObject{}, err } - projectOptions, err := cli.NewProjectOptions(files, cli.WithOsEnv, cli.WithWorkingDirectory(workingDir), cli.WithInterpolation(true)) + projectOptions, err := cli.NewProjectOptions( + files, cli.WithOsEnv, + cli.WithWorkingDirectory(workingDir), + cli.WithInterpolation(true), + cli.WithProfiles(profiles), + ) if err != nil { return kobject.KomposeObject{}, errors.Wrap(err, "Unable to create compose options") } @@ -462,6 +467,7 @@ func dockerComposeToKomposeMapping(composeObject *types.Project) (kobject.Kompos serviceConfig.Privileged = composeServiceConfig.Privileged serviceConfig.User = composeServiceConfig.User serviceConfig.ReadOnly = composeServiceConfig.ReadOnly + serviceConfig.Profiles = []string{"frontend-dev"} serviceConfig.Stdin = composeServiceConfig.StdinOpen serviceConfig.Tty = composeServiceConfig.Tty serviceConfig.TmpFs = composeServiceConfig.Tmpfs diff --git a/pkg/loader/loader.go b/pkg/loader/loader.go index bbea343c..def6f378 100644 --- a/pkg/loader/loader.go +++ b/pkg/loader/loader.go @@ -25,7 +25,7 @@ import ( // Loader interface defines loader that loads files and converts it to kobject representation type Loader interface { - LoadFile(files []string) (kobject.KomposeObject, error) + LoadFile(files []string, profiles []string) (kobject.KomposeObject, error) ///Name() string }