From f41985a00e1473c20bddc378c5d1b2415149d9f3 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Mon, 27 Mar 2017 17:31:23 +0530 Subject: [PATCH] Added support for different namespaces Now we can deploy application in different namespaces using the "--namespace=" flag with kompose up and kompose down. The --namepace flag will deploy the application in that particular "namespace" if exist." --- cmd/down.go | 10 +++++++--- cmd/up.go | 4 ++++ pkg/kobject/kobject.go | 2 ++ pkg/transformer/kubernetes/kubernetes.go | 17 +++++++++++++++-- pkg/transformer/openshift/openshift.go | 18 +++++++++++++++--- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/cmd/down.go b/cmd/down.go index 6d906cff..36c12630 100644 --- a/cmd/down.go +++ b/cmd/down.go @@ -26,7 +26,8 @@ import ( // TODO: comment var ( - DownOpt kobject.ConvertOptions + DownNamespace string + DownOpt kobject.ConvertOptions ) var downCmd = &cobra.Command{ @@ -37,8 +38,10 @@ var downCmd = &cobra.Command{ // Create the Convert options. DownOpt = kobject.ConvertOptions{ - InputFiles: GlobalFiles, - Provider: strings.ToLower(GlobalProvider), + InputFiles: GlobalFiles, + Provider: strings.ToLower(GlobalProvider), + Namespace: DownNamespace, + IsNamespaceFlag: cmd.Flags().Lookup("namespace").Changed, } // Validate before doing anything else. @@ -50,5 +53,6 @@ var downCmd = &cobra.Command{ } func init() { + downCmd.Flags().StringVar(&DownNamespace, "namespace", "default", " Specify Namespace to deploy your application") RootCmd.AddCommand(downCmd) } diff --git a/cmd/up.go b/cmd/up.go index 41e81130..ac4700cf 100644 --- a/cmd/up.go +++ b/cmd/up.go @@ -29,6 +29,7 @@ var ( UpReplicas int UpEmptyVols bool UpInsecureRepo bool + UpNamespace string UpOpt kobject.ConvertOptions ) @@ -44,7 +45,9 @@ var upCmd = &cobra.Command{ InputFiles: GlobalFiles, Provider: strings.ToLower(GlobalProvider), EmptyVols: UpEmptyVols, + Namespace: UpNamespace, InsecureRepository: UpInsecureRepo, + IsNamespaceFlag: cmd.Flags().Lookup("namespace").Changed, } // Validate before doing anything else. @@ -59,5 +62,6 @@ func init() { upCmd.Flags().BoolVar(&UpEmptyVols, "emptyvols", false, "Use empty volumes. Do not generate PersistentVolumeClaim") upCmd.Flags().IntVar(&UpReplicas, "replicas", 1, "Specify the number of replicas generated") upCmd.Flags().BoolVar(&UpInsecureRepo, "insecure-repository", false, "Use an insecure Docker repository for OpenShift ImageStream") + upCmd.Flags().StringVar(&UpNamespace, "namespace", "default", "Specify Namespace to deploy your application") RootCmd.AddCommand(upCmd) } diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index afddf3cd..8c95ba2f 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -48,10 +48,12 @@ type ConvertOptions struct { InputFiles []string OutFile string Provider string + Namespace string IsDeploymentFlag bool IsDaemonSetFlag bool IsReplicationControllerFlag bool IsDeploymentConfigFlag bool + IsNamespaceFlag bool } // ServiceConfig holds the basic struct of a container diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index 1de87b08..c3e0c80f 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -640,11 +640,17 @@ func (k *Kubernetes) Deploy(komposeObject kobject.KomposeObject, opt kobject.Con log.Info("We are going to create Kubernetes Deployments, Services" + pvcStr + "for your Dockerized application. " + "If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. \n") - client, namespace, err := k.GetKubernetesClient() + client, ns, err := k.GetKubernetesClient() + namespace := ns + if opt.IsNamespaceFlag { + namespace = opt.Namespace + } if err != nil { return err } + log.Infof("Deploying application in %q namespace", namespace) + for _, v := range objects { switch t := v.(type) { case *extensions.Deployment: @@ -700,12 +706,19 @@ func (k *Kubernetes) Undeploy(komposeObject kobject.KomposeObject, opt kobject.C return errorList } - client, namespace, err := k.GetKubernetesClient() + client, ns, err := k.GetKubernetesClient() + namespace := ns + if opt.IsNamespaceFlag { + namespace = opt.Namespace + } + if err != nil { errorList = append(errorList, err) return errorList } + log.Infof("Deleting application in %q namespace", namespace) + for _, v := range objects { label := labels.SelectorFromSet(labels.Set(map[string]string{transformer.Selector: v.(meta.Object).GetName()})) options := api.ListOptions{LabelSelector: label} diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index aabca475..bae4c2dd 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -446,17 +446,23 @@ func (o *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.Conv if !opt.EmptyVols { pvcStr = " and PersistentVolumeClaims " } - fmt.Println("We are going to create OpenShift DeploymentConfigs, Services" + pvcStr + "for your Dockerized application. \n" + + log.Info("We are going to create OpenShift DeploymentConfigs, Services" + pvcStr + "for your Dockerized application. \n" + "If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead. \n") oclient, err := o.getOpenShiftClient() if err != nil { return err } - kclient, namespace, err := o.GetKubernetesClient() + kclient, ns, err := o.GetKubernetesClient() if err != nil { return err } + namespace := ns + if opt.IsNamespaceFlag { + namespace = opt.Namespace + } + + log.Infof("Deploying application in %q namespace", namespace) for _, v := range objects { switch t := v.(type) { @@ -530,11 +536,17 @@ func (o *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.Co errorList = append(errorList, err) return errorList } - kclient, namespace, err := o.GetKubernetesClient() + kclient, ns, err := o.GetKubernetesClient() if err != nil { errorList = append(errorList, err) return errorList } + namespace := ns + if opt.IsNamespaceFlag { + namespace = opt.Namespace + } + + log.Infof("Deleting application in %q namespace", namespace) for _, v := range objects { label := labels.SelectorFromSet(labels.Set(map[string]string{transformer.Selector: v.(meta.Object).GetName()}))