From 9b707016a9694ae06dcb41ccb18e042490a41220 Mon Sep 17 00:00:00 2001 From: Daniel-GrunbergerCA Date: Tue, 14 Sep 2021 11:50:53 +0300 Subject: [PATCH] Add set/get key-value option --- cautils/customerloader.go | 42 ++++++++++++++++++++++++++++++++ cmd/cluster.go | 18 ++++++++++++++ cmd/config.go | 19 +++++++++++++++ cmd/get.go | 50 +++++++++++++++++++++++++++++++++++++++ cmd/set.go | 45 +++++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+) create mode 100644 cmd/cluster.go create mode 100644 cmd/config.go create mode 100644 cmd/get.go create mode 100644 cmd/set.go diff --git a/cautils/customerloader.go b/cautils/customerloader.go index 053217c7..05a2a9ca 100644 --- a/cautils/customerloader.go +++ b/cautils/customerloader.go @@ -103,6 +103,48 @@ func (c *ClusterConfig) GetCustomerGUID() string { } return "" } + +func (c *ClusterConfig) GetValueByKeyFromConfigMap(key string) (string, error) { + + configMap, err := c.k8s.KubernetesClient.CoreV1().ConfigMaps(c.defaultNS).Get(context.Background(), configMapName, metav1.GetOptions{}) + + if err != nil { + return "", err + } + if val, ok := configMap.Data[key]; ok { + return val, nil + } else { + return "", fmt.Errorf("value does not exist.") + } + +} + +func (c *ClusterConfig) SetKeyValueInConfigmap(key string, value string) error { + + configMap, err := c.k8s.KubernetesClient.CoreV1().ConfigMaps(c.defaultNS).Get(context.Background(), configMapName, metav1.GetOptions{}) + if err != nil { + configMap = &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: configMapName, + }, + } + } + + if len(configMap.Data) == 0 { + configMap.Data = make(map[string]string) + } + + configMap.Data[key] = value + + if err != nil { + _, err = c.k8s.KubernetesClient.CoreV1().ConfigMaps(c.defaultNS).Create(context.Background(), configMap, metav1.CreateOptions{}) + } else { + _, err = c.k8s.KubernetesClient.CoreV1().ConfigMaps(configMap.Namespace).Update(context.Background(), configMap, metav1.UpdateOptions{}) + } + + return err +} + func (c *ClusterConfig) SetCustomerGUID() error { // get from configMap diff --git a/cmd/cluster.go b/cmd/cluster.go new file mode 100644 index 00000000..e81ec7d0 --- /dev/null +++ b/cmd/cluster.go @@ -0,0 +1,18 @@ +package cmd + +import ( + "github.com/spf13/cobra" +) + +// clusterCmd represents the cluster command +var clusterCmd = &cobra.Command{ + Use: "cluster", + Short: "Set configuration for cluster", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + }, +} + +func init() { + configCmd.AddCommand(clusterCmd) +} diff --git a/cmd/config.go b/cmd/config.go new file mode 100644 index 00000000..9b4e4d4a --- /dev/null +++ b/cmd/config.go @@ -0,0 +1,19 @@ +package cmd + +import ( + "github.com/spf13/cobra" +) + +// configCmd represents the config command +var configCmd = &cobra.Command{ + Use: "config", + Short: "Set configuration", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + + }, +} + +func init() { + rootCmd.AddCommand(configCmd) +} diff --git a/cmd/get.go b/cmd/get.go new file mode 100644 index 00000000..83915524 --- /dev/null +++ b/cmd/get.go @@ -0,0 +1,50 @@ +package cmd + +import ( + "fmt" + "strings" + + "github.com/armosec/kubescape/cautils" + "github.com/armosec/kubescape/cautils/getter" + "github.com/armosec/kubescape/cautils/k8sinterface" + "github.com/spf13/cobra" +) + +var getCmd = &cobra.Command{ + Use: "get ", + Short: "Get configuration in cluster", + Long: ``, + ValidArgs: supportedFrameworks, + Args: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 || len(args) > 1 { + return fmt.Errorf("requires one argument") + } + + keyValue := strings.Split(args[0], "=") + if len(keyValue) != 1 { + return fmt.Errorf("requires one argument") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + keyValue := strings.Split(args[0], "=") + key := keyValue[0] + + k8s := k8sinterface.NewKubernetesApi() + clusterConfig := cautils.NewClusterConfig(k8s, getter.NewArmoAPI()) + val, err := clusterConfig.GetValueByKeyFromConfigMap(key) + if err != nil { + if err.Error() == "value does not exist." { + fmt.Printf("Could net get value from configmap, reason: %s\n", err) + return nil + } + return err + } + fmt.Println(key + "=" + val) + return nil + }, +} + +func init() { + clusterCmd.AddCommand(getCmd) +} diff --git a/cmd/set.go b/cmd/set.go new file mode 100644 index 00000000..c464c490 --- /dev/null +++ b/cmd/set.go @@ -0,0 +1,45 @@ +package cmd + +import ( + "fmt" + "strings" + + "github.com/armosec/kubescape/cautils" + "github.com/armosec/kubescape/cautils/getter" + "github.com/armosec/kubescape/cautils/k8sinterface" + "github.com/spf13/cobra" +) + +var setCmd = &cobra.Command{ + Use: "set =", + Short: "Set configuration in cluster", + Long: ``, + ValidArgs: supportedFrameworks, + Args: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 || len(args) > 1 { + return fmt.Errorf("requires one argument: =") + } + keyValue := strings.Split(args[0], "=") + if len(keyValue) != 2 { + return fmt.Errorf("requires one argument: =") + } + return nil + }, + RunE: func(cmd *cobra.Command, args []string) error { + keyValue := strings.Split(args[0], "=") + key := keyValue[0] + data := keyValue[1] + + k8s := k8sinterface.NewKubernetesApi() + clusterConfig := cautils.NewClusterConfig(k8s, getter.NewArmoAPI()) + if err := clusterConfig.SetKeyValueInConfigmap(key, data); err != nil { + return err + } + fmt.Println("Value added successfully.") + return nil + }, +} + +func init() { + clusterCmd.AddCommand(setCmd) +}