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)
+ }
+}