remove makefile extra tab

Change-Id: I20564e801d307935b9669db81665cc0ed130e698
Signed-off-by: gunjan5 <gupatel@ciena.com>
diff --git a/config-generator/configGen.go b/config-generator/configGen.go
new file mode 100644
index 0000000..c57b145
--- /dev/null
+++ b/config-generator/configGen.go
@@ -0,0 +1,175 @@
+package main
+
+import (
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"os"
+	"strings"
+	"text/template"
+)
+
+type hosts struct {
+	Host []struct {
+		Mac         string   `json:"mac"`
+		IpAddresses []string `json:"ipAddresses"`
+		Location    struct {
+			ElementID string `json:"elementId`
+			Port      string `json:"port"`
+		} `json:"location"`
+		Comma   string
+		Gateway string
+	} `json:"hosts"`
+}
+
+type devices struct {
+	Device []struct {
+		Id          string `json:"id"`
+		ChassisId   string `json:"chassisId"`
+		Annotations struct {
+			ManagementAddress string `json:"managementAddress"`
+		} `json:"annotations"`
+		Comma string `default:","`
+	} `json:"devices"`
+}
+
+type onosLinks struct {
+	Links []link `json:"links"`
+}
+
+type link struct {
+	Src devicePort `json:"src"`
+	Dst devicePort `json:"dst"`
+}
+
+type devicePort struct {
+	Port   string `json:"port"`
+	Device string `json:"device"`
+}
+
+type linkStructJSON struct {
+	Val   string
+	Comma string
+}
+
+func main() {
+	onos := "http://karaf:karaf@127.0.0.1:8181"
+
+	err := os.Remove("network-cfg.json")
+	if err != nil {
+		fmt.Println("Warning: no file called network-cfg.json (ignore if this is the first run)")
+	}
+	generateDevicesJSON(onos)
+	generateLinkJSON(onos)
+	generateHostJSON(onos)
+
+	fmt.Println("Config file generated: network-cfg.json")
+
+}
+
+func writeToFile(object interface{}, t string) {
+	f, err := os.OpenFile("network-cfg.json", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
+	if err != nil {
+		panic(err)
+	}
+
+	defer f.Close()
+
+	tpl, err := template.ParseFiles(t)
+	check(err)
+	err = tpl.Execute(f, object)
+	check(err)
+}
+
+func generateDevicesJSON(onos string) {
+	ds := getData(onos + "/onos/v1/devices")
+
+	var d devices
+	err := json.Unmarshal(ds, &d)
+	check(err)
+
+	for k, _ := range d.Device {
+		d.Device[k].Comma = ","
+		if k >= len(d.Device)-1 {
+			d.Device[k].Comma = ""
+		}
+	}
+
+	writeToFile(d.Device, "devices.tpl")
+
+}
+
+func generateHostJSON(onos string) {
+	hs := getData(onos + "/onos/v1/hosts")
+	var h hosts
+	err := json.Unmarshal(hs, &h)
+	check(err)
+
+	for k, _ := range h.Host {
+
+		h.Host[k].Comma = ","
+		if k >= len(h.Host)-1 {
+			h.Host[k].Comma = ""
+		}
+
+		parts := strings.Split(h.Host[k].IpAddresses[0], ".")
+		ip := ""
+		for _, v := range parts[:len(parts)-1] {
+			ip = ip + v + "."
+		}
+		h.Host[k].Gateway = ip
+	}
+
+	writeToFile(h.Host, "ports.tpl")
+
+	writeToFile(h.Host, "hosts.tpl")
+
+}
+
+func generateLinkJSON(onos string) {
+
+	links := getData(onos + "/onos/v1/links")
+
+	var l onosLinks
+	err := json.Unmarshal(links, &l)
+	check(err)
+
+	var in []linkStructJSON
+
+	for k, v := range l.Links {
+
+		comma := ","
+		val := fmt.Sprint(v.Src.Device + "/" + v.Src.Port + "-" + v.Dst.Device + "/" + v.Dst.Port)
+		if k >= len(l.Links)-1 {
+			comma = ""
+		}
+
+		tmp := linkStructJSON{val, comma}
+		in = append(in, tmp)
+
+	}
+
+	writeToFile(in, "links.tpl")
+
+}
+
+func getData(url string) []byte {
+
+	resp, err := http.Get(url)
+	check(err)
+
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	check(err)
+
+	return body
+
+}
+
+func check(e error) {
+	if e != nil {
+		panic(e)
+	}
+}