forked from LaconicNetwork/kompose
* fix issue https://github.com/kubernetes/kompose/issues/1683 * add tests, die if inputfiles not specified * fix GetComposeFileDir function and use it * use fixed GetComposeFileDir instead of filepath.Dir * return error instead of fatal * add pod configmap creation to openshift
This commit is contained in:
@@ -18,6 +18,7 @@ package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
@@ -224,6 +225,31 @@ func Convert(opt kobject.ConvertOptions) ([]runtime.Object, error) {
|
||||
|
||||
komposeObject.Namespace = opt.Namespace
|
||||
|
||||
// Get the directory of the compose file
|
||||
workDir, err := transformer.GetComposeFileDir(opt.InputFiles)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to get compose file directory: %s", err)
|
||||
}
|
||||
|
||||
// convert env_file from absolute to relative path
|
||||
for _, service := range komposeObject.ServiceConfigs {
|
||||
if len(service.EnvFile) <= 0 {
|
||||
continue
|
||||
}
|
||||
for i, envFile := range service.EnvFile {
|
||||
if !filepath.IsAbs(envFile) {
|
||||
continue
|
||||
}
|
||||
|
||||
relPath, err := filepath.Rel(workDir, envFile)
|
||||
if err != nil {
|
||||
log.Fatalf(err.Error())
|
||||
}
|
||||
|
||||
service.EnvFile[i] = filepath.ToSlash(relPath)
|
||||
}
|
||||
}
|
||||
|
||||
// Get a transformer that maps komposeObject to provider's primitives
|
||||
t := getTransformer(opt)
|
||||
|
||||
|
||||
@@ -220,7 +220,11 @@ func (k *Kubernetes) InitSvc(name string, service kobject.ServiceConfig) *api.Se
|
||||
|
||||
// InitConfigMapForEnv initializes a ConfigMap object
|
||||
func (k *Kubernetes) InitConfigMapForEnv(name string, opt kobject.ConvertOptions, envFile string) *api.ConfigMap {
|
||||
envs, err := GetEnvsFromFile(envFile)
|
||||
workDir, err := transformer.GetComposeFileDir(opt.InputFiles)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to get compose file directory: %s", err)
|
||||
}
|
||||
envs, err := GetEnvsFromFile(filepath.Join(workDir, envFile))
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to retrieve env file: %s", err)
|
||||
}
|
||||
@@ -1103,7 +1107,11 @@ func ConfigEnvs(service kobject.ServiceConfig, opt kobject.ConvertOptions) ([]ap
|
||||
envName := FormatEnvName(file)
|
||||
|
||||
// Load environment variables from file
|
||||
envLoad, err := GetEnvsFromFile(file)
|
||||
workDir, err := transformer.GetComposeFileDir(opt.InputFiles)
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to get compose file directory: %s", err)
|
||||
}
|
||||
envLoad, err := GetEnvsFromFile(filepath.Join(workDir, file))
|
||||
if err != nil {
|
||||
return envs, errors.Wrap(err, "Unable to read env_file")
|
||||
}
|
||||
@@ -1579,11 +1587,18 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Generate pod only and nothing more
|
||||
// Generate pod and configmap objects
|
||||
if (service.Restart == "no" || service.Restart == "on-failure") && !opt.IsPodController() {
|
||||
log.Infof("Create kubernetes pod instead of pod controller due to restart policy: %s", service.Restart)
|
||||
pod := k.InitPod(name, service)
|
||||
objects = append(objects, pod)
|
||||
|
||||
if len(service.EnvFile) > 0 {
|
||||
for _, envFile := range service.EnvFile {
|
||||
configMap := k.InitConfigMapForEnv(name, opt, envFile)
|
||||
objects = append(objects, configMap)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
objects = k.CreateWorkloadAndConfigMapObjects(name, service, opt)
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
||||
}
|
||||
}
|
||||
|
||||
// Generate pod only and nothing more
|
||||
// Generate pod and configmap objects
|
||||
if service.Restart == "no" || service.Restart == "on-failure" {
|
||||
// Error out if Controller Object is specified with restart: 'on-failure'
|
||||
if opt.IsDeploymentConfigFlag {
|
||||
@@ -333,6 +333,13 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
||||
}
|
||||
pod := o.InitPod(name, service)
|
||||
objects = append(objects, pod)
|
||||
|
||||
if len(service.EnvFile) > 0 {
|
||||
for _, envFile := range service.EnvFile {
|
||||
configMap := o.InitConfigMapForEnv(name, opt, envFile)
|
||||
objects = append(objects, configMap)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
objects = o.CreateWorkloadAndConfigMapObjects(name, service, opt)
|
||||
|
||||
|
||||
@@ -336,14 +336,15 @@ func (env EnvSort) Swap(i, j int) {
|
||||
|
||||
// GetComposeFileDir returns compose file directory
|
||||
func GetComposeFileDir(inputFiles []string) (string, error) {
|
||||
// Check if input files are specified
|
||||
if len(inputFiles) <= 0 {
|
||||
return "", errors.New("No input files specified")
|
||||
}
|
||||
|
||||
// Lets assume all the docker-compose files are in the same directory
|
||||
inputFile := inputFiles[0]
|
||||
if strings.Index(inputFile, "/") != 0 {
|
||||
workDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
inputFile = filepath.Join(workDir, inputFile)
|
||||
inputFile, err := filepath.Abs(inputFiles[0])
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
log.Debugf("Compose file dir: %s", filepath.Dir(inputFile))
|
||||
return filepath.Dir(inputFile), nil
|
||||
|
||||
Reference in New Issue
Block a user