From fc381d84c9bd26414dfef85c5281512eff3cdf71 Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Tue, 27 Jun 2017 15:42:59 +0200 Subject: [PATCH] Add Create Environment --- cmds/cruds.go | 9 +++++++ cmds/environ.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ gofabric8.go | 4 +++ 3 files changed, 79 insertions(+) diff --git a/cmds/cruds.go b/cmds/cruds.go index 7ddc93d21..0d5c71e55 100644 --- a/cmds/cruds.go +++ b/cmds/cruds.go @@ -24,6 +24,15 @@ const ( ` ) +func NewCmdCreate() *cobra.Command { + cmd := &cobra.Command{ + Use: "create", + Short: "Create a resource type", + Long: longhelp, + } + return cmd +} + func NewCmdDelete() *cobra.Command { cmd := &cobra.Command{ Use: "delete", diff --git a/cmds/environ.go b/cmds/environ.go index da14d89d6..ef1fd537f 100644 --- a/cmds/environ.go +++ b/cmds/environ.go @@ -19,6 +19,8 @@ import ( "strings" + "strconv" + "github.com/fabric8io/gofabric8/client" "github.com/fabric8io/gofabric8/util" "github.com/spf13/cobra" @@ -69,6 +71,70 @@ func NewCmdGetEnviron(f *cmdutil.Factory) *cobra.Command { return cmd } +func NewCmdCreateEnviron(f *cmdutil.Factory) (cmd *cobra.Command) { + cmd = &cobra.Command{ + Use: "environ", + Short: "Create environment from fabric8-environments configmap", + Long: "gofabric8 create environ environKey namespace=string order=int ...", + Run: func(cmd *cobra.Command, args []string) { + var ev EnvironmentData + var yamlData []byte + ev.Order = -1 + + for _, kv := range args { + split := strings.Split(kv, "=") + k := split[0] + v := split[1] + + if strings.ToLower(k) == "name" { + ev.Name = strings.ToLower(v) + } else if strings.ToLower(k) == "namespace" { + ev.Namespace = v + } else if strings.ToLower(k) == "order" { + conv, err := strconv.Atoi(v) + if err != nil { + util.Errorf("Cannot use %s from %s as number\n", v, k) + return + } + ev.Order = conv + } else { + util.Errorf("Unkown key: %s\n", k) + return + } + } + + if ev.Name == "" || ev.Namespace == "" || ev.Order == -1 { + util.Error("missing some key=value\n") + cmd.Help() + return + } + + detectedNS, c, _ := getOpenShiftClient(f) + yamlData, err := yaml.Marshal(&ev) + if err != nil { + util.Fatalf("Failed to marshal configmap fabric8-environments error: %v\ntemplate: %s", err, string(yamlData)) + } + + selector, err := k8api.LabelSelectorAsSelector( + &k8api.LabelSelector{MatchLabels: map[string]string{"kind": "environments"}}) + cmdutil.CheckErr(err) + + cfgmaps, err := c.ConfigMaps(detectedNS).List(api.ListOptions{LabelSelector: selector}) + cmdutil.CheckErr(err) + + cfgmap := &cfgmaps.Items[0] // TODO(chmou): can we have more than one cfgmap with kind=environments label? + cfgmap.Data[ev.Name] = string(yamlData) + + _, err = c.ConfigMaps(detectedNS).Update(cfgmap) + cmdutil.CheckErr(err) + + //cfgmap, err := c.ConfigMaps(detectedNS).Create() + + }, + } + return +} + // NewCmdDeleteEnviron is a command to delete an environ using: gofabric8 delete environ abcd func NewCmdDeleteEnviron(f *cmdutil.Factory) *cobra.Command { cmd := &cobra.Command{ diff --git a/gofabric8.go b/gofabric8.go index 445c4e02e..459910a7a 100644 --- a/gofabric8.go +++ b/gofabric8.go @@ -130,6 +130,10 @@ func main() { cmds.AddCommand(getcmd) getcmd.AddCommand(commands.NewCmdGetEnviron(f)) + createcmd := commands.NewCmdCreate() + cmds.AddCommand(createcmd) + createcmd.AddCommand(commands.NewCmdCreateEnviron(f)) + deletecmd := commands.NewCmdDelete() cmds.AddCommand(deletecmd) deletecmd.AddCommand(commands.NewCmdDeleteCluster(f))