diff --git a/cmd/convert.go b/cmd/convert.go index 8a5c301b..8752d39a 100644 --- a/cmd/convert.go +++ b/cmd/convert.go @@ -55,21 +55,25 @@ var convertCmd = &cobra.Command{ // Create the Convert Options. ConvertOpt = kobject.ConvertOptions{ - ToStdout: ConvertStdout, - CreateChart: ConvertChart, - GenerateYaml: ConvertYaml, - GenerateJSON: ConvertJSON, - Replicas: ConvertReplicas, - InputFiles: GlobalFiles, - OutFile: ConvertOut, - Provider: strings.ToLower(GlobalProvider), - CreateD: ConvertDeployment, - CreateDS: ConvertDaemonSet, - CreateRC: ConvertReplicationController, - BuildRepo: ConvertBuildRepo, - BuildBranch: ConvertBuildBranch, - CreateDeploymentConfig: ConvertDeploymentConfig, - EmptyVols: ConvertEmptyVols, + ToStdout: ConvertStdout, + CreateChart: ConvertChart, + GenerateYaml: ConvertYaml, + GenerateJSON: ConvertJSON, + Replicas: ConvertReplicas, + InputFiles: GlobalFiles, + OutFile: ConvertOut, + Provider: strings.ToLower(GlobalProvider), + CreateD: ConvertDeployment, + CreateDS: ConvertDaemonSet, + CreateRC: ConvertReplicationController, + BuildRepo: ConvertBuildRepo, + BuildBranch: ConvertBuildBranch, + CreateDeploymentConfig: ConvertDeploymentConfig, + EmptyVols: ConvertEmptyVols, + IsDeploymentFlag: cmd.Flags().Lookup("deployment").Changed, + IsDaemonSetFlag: cmd.Flags().Lookup("daemon-set").Changed, + IsReplicationControllerFlag: cmd.Flags().Lookup("replication-controller").Changed, + IsDeploymentConfigFlag: cmd.Flags().Lookup("deployment-config").Changed, } // Validate before doing anything else. Use "bundle" if passed in. diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index 80b89e72..26bebeee 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -29,21 +29,25 @@ type KomposeObject struct { // ConvertOptions holds all options that controls transformation process type ConvertOptions struct { - ToStdout bool - CreateD bool - CreateRC bool - CreateDS bool - CreateDeploymentConfig bool - BuildRepo string - BuildBranch string - CreateChart bool - GenerateYaml bool - GenerateJSON bool - EmptyVols bool - Replicas int - InputFiles []string - OutFile string - Provider string + ToStdout bool + CreateD bool + CreateRC bool + CreateDS bool + CreateDeploymentConfig bool + BuildRepo string + BuildBranch string + CreateChart bool + GenerateYaml bool + GenerateJSON bool + EmptyVols bool + Replicas int + InputFiles []string + OutFile string + Provider string + IsDeploymentFlag bool + IsDaemonSetFlag bool + IsReplicationControllerFlag bool + IsDeploymentConfigFlag bool } // ServiceConfig holds the basic struct of a container diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index e6488619..66f78e9b 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -468,6 +468,10 @@ 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 { + logrus.Fatalf("Controller object cannot be specified with restart: 'on-failure'") + } pod := k.InitPod(name, service) objects = append(objects, pod) } else { diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index 72207550..1524b60b 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -321,6 +321,10 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C // 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.IsDeploymentConfigFlag { + logrus.Fatalf("Controller object cannot be specified with restart: 'on-failure'") + } pod := o.InitPod(name, service) objects = append(objects, pod) } else { diff --git a/script/test/cmd/tests.sh b/script/test/cmd/tests.sh index 57665fe9..ff708966 100755 --- a/script/test/cmd/tests.sh +++ b/script/test/cmd/tests.sh @@ -110,10 +110,10 @@ convert::expect_success_and_warning "kompose --bundle $KOMPOSE_ROOT/script/test/ # Test related to restart options in docker-compose # kubernetes test convert::expect_success "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-no.yml convert --stdout -j" "$KOMPOSE_ROOT/script/test/fixtures/restart-options/output-k8s-restart-no.json" -convert::expect_success "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-onfail.yml convert --stdout -j" "$KOMPOSE_ROOT/script/test/fixtures/restart-options/output-k8s-restart-onfail.json" +convert::failure "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-onfail.yml convert --stdout -j" "Controller object cannot be specified with restart: 'on-failure'" # openshift test convert::expect_success "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-no.yml --provider openshift convert --stdout -j" "$KOMPOSE_ROOT/script/test/fixtures/restart-options/output-os-restart-no.json" -convert::expect_success "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-onfail.yml --provider openshift convert --stdout -j" "$KOMPOSE_ROOT/script/test/fixtures/restart-options/output-os-restart-onfail.json" +convert::failure "kompose -f $KOMPOSE_ROOT/script/test/fixtures/restart-options/docker-compose-restart-onfail.yml --provider openshift convert --stdout -j" "Controller object cannot be specified with restart: 'on-failure'" ###### diff --git a/script/test/fixtures/restart-options/output-k8s-restart-onfail.json b/script/test/fixtures/restart-options/output-k8s-restart-onfail.json deleted file mode 100644 index e7748763..00000000 --- a/script/test/fixtures/restart-options/output-k8s-restart-onfail.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "kind": "List", - "apiVersion": "v1", - "metadata": {}, - "items": [ - { - "kind": "Pod", - "apiVersion": "v1", - "metadata": { - "name": "foo", - "creationTimestamp": null, - "labels": { - "service": "foo" - } - }, - "spec": { - "containers": [ - { - "name": "foo", - "image": "foobar", - "env": [ - { - "name": "GITHUB", - "value": "surajssd" - } - ], - "resources": {} - } - ], - "restartPolicy": "OnFailure" - }, - "status": {} - } - ] -}