From 126d9820c42a402826b5507721d4e34f50ce5b65 Mon Sep 17 00:00:00 2001 From: Suraj Narwade Date: Tue, 14 Nov 2017 09:56:29 +0530 Subject: [PATCH] Adding `--controller` flag in `up` & `down` To make `kompose up` & `kompose convert` equal in feature, This PR will add `--controller` flag for `kompose up` as well as `kompose down` so that user experience will be the same for `up` & `convert` Resolves #798 since we are adding `--controller` to `up` and `down`, So respective code to deploy and undeploy also being added for `daemonset` and `replicationcontroller` Added tests for `--controller` --- cmd/down.go | 9 +++- cmd/up.go | 4 ++ pkg/transformer/kubernetes/kubernetes.go | 65 ++++++++++++++++++++++++ script/test_k8s/kubernetes.sh | 13 +++++ 4 files changed, 89 insertions(+), 2 deletions(-) diff --git a/cmd/down.go b/cmd/down.go index 85e144e2..44a09742 100644 --- a/cmd/down.go +++ b/cmd/down.go @@ -17,6 +17,8 @@ limitations under the License. package cmd import ( + "strings" + "github.com/kubernetes/kompose/pkg/app" "github.com/kubernetes/kompose/pkg/kobject" "github.com/spf13/cobra" @@ -24,8 +26,9 @@ import ( // TODO: comment var ( - DownNamespace string - DownOpt kobject.ConvertOptions + DownNamespace string + DownController string + DownOpt kobject.ConvertOptions ) var downCmd = &cobra.Command{ @@ -39,6 +42,7 @@ var downCmd = &cobra.Command{ InputFiles: GlobalFiles, Provider: GlobalProvider, Namespace: DownNamespace, + Controller: strings.ToLower(DownController), IsNamespaceFlag: cmd.Flags().Lookup("namespace").Changed, } @@ -52,5 +56,6 @@ var downCmd = &cobra.Command{ func init() { downCmd.Flags().StringVar(&DownNamespace, "namespace", "default", " Specify Namespace to deploy your application") + downCmd.Flags().StringVar(&DownController, "controller", "", `Set the output controller ("deployment"|"daemonSet"|"replicationController")`) RootCmd.AddCommand(downCmd) } diff --git a/cmd/up.go b/cmd/up.go index 77a6587f..ad56c6fb 100644 --- a/cmd/up.go +++ b/cmd/up.go @@ -22,6 +22,7 @@ import ( "github.com/kubernetes/kompose/pkg/app" "github.com/kubernetes/kompose/pkg/kobject" "github.com/spf13/cobra" + "strings" ) // TODO: comment @@ -35,6 +36,7 @@ var ( UpBuild string UpBuildBranch string UpBuildRepo string + UpController string ) var upCmd = &cobra.Command{ @@ -60,6 +62,7 @@ var upCmd = &cobra.Command{ InsecureRepository: UpInsecureRepo, BuildBranch: UpBuildBranch, BuildRepo: UpBuildRepo, + Controller: strings.ToLower(UpController), IsNamespaceFlag: cmd.Flags().Lookup("namespace").Changed, } @@ -79,6 +82,7 @@ func init() { upCmd.Flags().StringVar(&UpBuild, "build", "local", `Set the type of build ("local"|"build-config" (OpenShift only)|"none")`) upCmd.Flags().StringVar(&UpBuildRepo, "build-repo", "", "Specify source repository for buildconfig (default remote origin)") upCmd.Flags().StringVar(&UpBuildBranch, "build-branch", "", "Specify repository branch to use for buildconfig (default master)") + upCmd.Flags().StringVar(&UpController, "controller", "", `Set the output controller ("deployment"|"daemonSet"|"replicationController")`) upCmd.Flags().MarkHidden("insecure-repository") upCmd.Flags().MarkHidden("build-repo") upCmd.Flags().MarkHidden("build-branch") diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index ebe0b509..40e80988 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -805,6 +805,21 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con return err } log.Infof("Successfully created Deployment: %s", t.Name) + + case *extensions.DaemonSet: + _, err := client.DaemonSets(namespace).Create(t) + if err != nil { + return err + } + log.Infof("Successfully created DaemonSet: %s", t.Name) + + case *api.ReplicationController: + _, err := client.ReplicationControllers(namespace).Create(t) + if err != nil { + return err + } + log.Infof("Successfully created ReplicationController: %s", t.Name) + case *api.Service: _, err := client.Services(namespace).Create(t) if err != nil { @@ -901,6 +916,56 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C } } + case *extensions.DaemonSet: + //delete deployment + daemonset, err := client.DaemonSets(namespace).List(options) + if err != nil { + errorList = append(errorList, err) + break + } + for _, l := range daemonset.Items { + if reflect.DeepEqual(l.Labels, komposeLabel) { + rpDaemonset, err := kubectl.ReaperFor(extensions.Kind("DaemonSet"), client) + if err != nil { + errorList = append(errorList, err) + break + } + //FIXME: gracePeriod is nil + err = rpDaemonset.Stop(namespace, t.Name, TIMEOUT*time.Second, nil) + if err != nil { + errorList = append(errorList, err) + break + } + log.Infof("Successfully deleted DaemonSet: %s", t.Name) + + } + } + + case *api.ReplicationController: + //delete deployment + replicationController, err := client.ReplicationControllers(namespace).List(options) + if err != nil { + errorList = append(errorList, err) + break + } + for _, l := range replicationController.Items { + if reflect.DeepEqual(l.Labels, komposeLabel) { + rpReplicationController, err := kubectl.ReaperFor(api.Kind("ReplicationController"), client) + if err != nil { + errorList = append(errorList, err) + break + } + //FIXME: gracePeriod is nil + err = rpReplicationController.Stop(namespace, t.Name, TIMEOUT*time.Second, nil) + if err != nil { + errorList = append(errorList, err) + break + } + log.Infof("Successfully deleted ReplicationController: %s", t.Name) + + } + } + case *api.Service: //delete svc svc, err := client.Services(namespace).List(options) diff --git a/script/test_k8s/kubernetes.sh b/script/test_k8s/kubernetes.sh index 0e5cfdb3..7d8c4179 100755 --- a/script/test_k8s/kubernetes.sh +++ b/script/test_k8s/kubernetes.sh @@ -103,6 +103,19 @@ test_k8s() { sleep 2 # Sleep for k8s to catch up to deployment echo -e "\n${RED}kompose down -f $f ${NC}\n" ./kompose down -f $f + echo -e "\nTesting controller=daemonset key\n" + echo -e "\n${RED}kompose up -f $f --controller=daemonset ${NC}\n" + ./kompose up -f $f --controller=daemonset + sleep 2 # Sleep for k8s to catch up to deployment + echo -e "\n${RED}kompose down -f $f --controller=daemonset ${NC}\n" + ./kompose down -f $f --controller=daemonset + echo -e "\nTesting controller=replicationcontroller key\n" + echo -e "\n${RED}kompose up -f $f --controller=replicationcontroller ${NC}\n" + ./kompose up -f $f --controller=replicationcontroller + sleep 2 # Sleep for k8s to catch up to deployment + echo -e "\n${RED}kompose down -f $f --controller=replicationcontroller ${NC}\n" + ./kompose down -f $f --controller=replicationcontroller + done }