summaryrefslogtreecommitdiffstats
path: root/api/consulConnection.go
diff options
context:
space:
mode:
authorShashank Kumar Shankar <shashank.kumar.shankar@intel.com>2018-02-07 17:50:55 -0800
committerShashank Kumar Shankar <shashank.kumar.shankar@intel.com>2018-02-07 17:53:10 -0800
commitbe355e888af5b332797aee7507fdd6ed93261d6d (patch)
tree000a31f76ed163d596ca91bce0e4aaf734efc314 /api/consulConnection.go
parent15bfff9d8227b7fd175e6bfd1d54ecd0352caca6 (diff)
Initial seed code for distributed KV store
This patch includes the initial seed code for KV store. Subsequent patches will include documentation, API ref and unit tests. Change-Id: I6296215b6b796400947ba925a2d8c46380e16992 Issue-ID: MUSIC-23 Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Diffstat (limited to 'api/consulConnection.go')
-rw-r--r--api/consulConnection.go113
1 files changed, 113 insertions, 0 deletions
diff --git a/api/consulConnection.go b/api/consulConnection.go
new file mode 100644
index 0000000..b8074e2
--- /dev/null
+++ b/api/consulConnection.go
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2018 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package api
+
+import (
+ "errors"
+ "fmt"
+ "github.com/hashicorp/consul/api"
+ "os"
+)
+
+func (kvStruct *KeyValue) WriteKVsToConsul() error {
+ for key, value := range kvStruct.kv {
+ if os.Getenv("CONSUL_IP") == "" {
+ return errors.New("CONSUL_IP environment variable not set.")
+ }
+ err := requestPUT(os.Getenv("CONSUL_IP"), key, value)
+ if err != nil {
+ return err
+ }
+ fmt.Println("key:", key, "value", value)
+ }
+ fmt.Println("Wrote KVs to Consul")
+ return nil
+}
+
+func GetKVFromConsul(key string) (string, error) {
+ if os.Getenv("CONSUL_IP") == "" {
+ return "", errors.New("CONSUL_IP environment variable not set.")
+ }
+ resp, err := requestGET(os.Getenv("CONSUL_IP"), key)
+ return resp, err
+}
+
+func GetKVsFromConsul() ([]string, error) {
+ if os.Getenv("CONSUL_IP") == "" {
+ return []string{""}, errors.New("CONSUL_IP environment variable not set.")
+ }
+ resp, err := requestGETS(os.Getenv("CONSUL_IP"))
+ return resp, err
+}
+
+func requestPUT(url string, key string, value string) error {
+ config := api.DefaultConfig()
+ config.Address = url + ":8500"
+ client, err := api.NewClient(config)
+
+ if err != nil {
+ return err
+ }
+
+ kv := client.KV()
+
+ p := &api.KVPair{Key: key, Value: []byte(value)}
+ _, err = kv.Put(p, nil)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func requestGET(url string, key string) (string, error) {
+ config := api.DefaultConfig()
+ config.Address = url + ":8500"
+ client, err := api.NewClient(config)
+
+ kv := client.KV()
+
+ pair, _, err := kv.Get(key, nil)
+
+ if pair == nil {
+ return string("No value found for key."), err
+ }
+ return string(pair.Value), err
+
+}
+
+func requestGETS(url string) ([]string, error) {
+ config := api.DefaultConfig()
+ config.Address = url + ":8500"
+ client, err := api.NewClient(config)
+
+ kv := client.KV()
+
+ pairs, _, err := kv.List("", nil)
+
+ if len(pairs) == 0 {
+ return []string{"No keys found."}, err
+ }
+
+ var res []string
+
+ for _, keypair := range pairs {
+ res = append(res, keypair.Key)
+ }
+
+ return res, err
+}