From 2dc6037ccecc9c03d4f0e948b6a6b7cf405891ed Mon Sep 17 00:00:00 2001 From: Hang Yan Date: Mon, 2 Nov 2020 18:17:12 +0800 Subject: [PATCH] Allow controller flag to override restart policy (#1340) --- go.mod | 1 - pkg/kobject/kobject.go | 5 +++++ pkg/transformer/kubernetes/kubernetes.go | 7 ++----- pkg/transformer/kubernetes/kubernetes_test.go | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index ee43f0a7..5528e132 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,6 @@ require ( github.com/docker/cli v0.0.0-20190711175710-5b38d82aa076 github.com/docker/libcompose v0.4.0 github.com/fatih/structs v1.1.0 - github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect github.com/fsouza/go-dockerclient v1.6.5 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/gotestyourself/gotestyourself v2.2.0+incompatible // indirect diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index ebcc34af..381bc6e5 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -78,6 +78,11 @@ type ConvertOptions struct { WithKomposeAnnotation bool } +// IsPodController indicate if the user want to use a controller +func (opt *ConvertOptions) IsPodController() bool { + return opt.IsDeploymentFlag || opt.IsDaemonSetFlag || opt.IsReplicationControllerFlag || opt.Controller != "" +} + // ServiceConfig holds the basic struct of a container type ServiceConfig struct { ContainerName string diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index 2ce42629..01945408 100755 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -1154,11 +1154,8 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject. } // Generate pod only and nothing more - if service.Restart == "no" || service.Restart == "on-failure" { - // Error out if Controller Object is specified with restart: 'on-failure' - if opt.IsDeploymentFlag || opt.IsDaemonSetFlag || opt.IsReplicationControllerFlag { - return nil, errors.New("Controller object cannot be specified with restart: 'on-failure'") - } + 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) } else { diff --git a/pkg/transformer/kubernetes/kubernetes_test.go b/pkg/transformer/kubernetes/kubernetes_test.go index 5d5ba48f..ebe335f7 100644 --- a/pkg/transformer/kubernetes/kubernetes_test.go +++ b/pkg/transformer/kubernetes/kubernetes_test.go @@ -518,8 +518,8 @@ func TestRestartOnFailure(t *testing.T) { t.Log("Test case:", name) k := Kubernetes{} _, err := k.Transform(test.komposeObject, test.opt) - if err == nil { - t.Errorf("Expected an error, got %v instead", err) + if err != nil { + t.Errorf("Expected nil error, got %v instead", err) } } }