ONOS IP as HTTP POST param and updated README
Change-Id: I1fc81858cc70fff83c9501dda048ed0754e9b872
(cherry picked from commit 87fd4063cf6896a062e3abd585d83a360e557151)
diff --git a/config-generator/README.md b/config-generator/README.md
index d694e71..7363057 100644
--- a/config-generator/README.md
+++ b/config-generator/README.md
@@ -1,7 +1,43 @@
-# config Gen
+# Config Gen
+-----------
+This service generates network configuration (`network-cfg.json`) for CORD POD
-- install Go
-- Make sure ONOS is reachable on localhost or modify the IP in the configGen.go
+### Prerequisites:
+- Install Go (only for local debugging)
+- Make sure ONOS is reachable either locally or via SSH tunnel (either way is fine)
- Make sure devices, hosts are connected and showing up in ONOS
-- Run by `go run congifGen.go`
-- You should see `network-cfg.json` file in your current directory
+- Config-gen server listens on port 1337, so make sure it's available, if not change the ENV VAR `CONFIGGEN_ConfigServerPort` to the port you wish config-gen to use
+
+
+### To run locally from source (without a container) for debugging:
+- Run `go run congifGen.go`
+- Use CURL to get the JSON output for `network-cfg.json` (CURL example below)
+
+
+### To run the container/uService:
+- Use the `Makefile` to build the container image with command `make image`
+- Run the container/service with `make run`
+- Example client would use the following CURL command to get the config:
+```bash
+curl -H "Content-Type: application/json" -d '{"switchcount" : 4, "hostcount": 4, "onosip" : "127.0.0.1" }' http://localhost:1337/config/
+```
+- Where, `switchcount`, and `hostcount` are the number of switches & hosts expected to be in the network respectively, and onosip is the ONOS IP (default is 127.0.0.1)
+
+
+### Note:
+- Every parameter is set by envconfig (https://github.com/kelseyhightower/envconfig)
+- For the parameters passed to the server through HTTP POST override the config set by envconfig
+- To modify any of the envvars, please set the ENV VAR with the prefix of `CONFIGGEN`
+- List of parameters set by envconfig:
+```bash
+ Port string `default:"8181"` //ONOS Port
+ IP string `default:"127.0.0.1"` //ONOS IP (Default)
+ SwitchCount int `default:"0"`
+ HostCount int `default:"0"`
+ Username string `default:"karaf"`
+ Password string `default:"karaf"`
+ LogLevel string `default:"warning" envconfig:"LOG_LEVEL"`
+ LogFormat string `default:"text" envconfig:"LOG_FORMAT"`
+ ConfigServerPort string `default:"1337"` //Config-gen service port default
+ ConfigServerIP string `default:"127.0.0.1"` //Config-gen service IP
+```
\ No newline at end of file
diff --git a/config-generator/configGen.go b/config-generator/configGen.go
index bcc3ddd..b0460f0 100644
--- a/config-generator/configGen.go
+++ b/config-generator/configGen.go
@@ -27,6 +27,8 @@
"text/template"
)
+var unmarshalError = errors.New("Error Unmarshaling the JSON Data\n")
+
type Config struct {
Port string `default:"8181"`
IP string `default:"127.0.0.1"`
@@ -83,8 +85,9 @@
}
type ConfigParam struct {
- SwitchCount int `json:"switchcount"`
- HostCount int `json:"hostcount"`
+ SwitchCount int `json:"switchcount"`
+ HostCount int `json:"hostcount"`
+ ONOSIP string `json:"onosip"`
}
var c Config
@@ -119,6 +122,7 @@
c.HostCount = para.HostCount
c.SwitchCount = para.SwitchCount
+ c.IP = para.ONOSIP
onos := "http://" + c.Username + ":" + c.Password + "@" + c.IP + ":" + c.Port
@@ -128,14 +132,19 @@
}
err = generateDevicesJSON(onos)
if err != nil {
- w.WriteHeader(http.StatusExpectationFailed)
+ w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, err.Error())
return
}
- generateLinkJSON(onos)
+ err = generateLinkJSON(onos)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ fmt.Fprintf(w, err.Error())
+ return
+ }
err = generateHostJSON(onos)
if err != nil {
- w.WriteHeader(http.StatusExpectationFailed)
+ w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, err.Error())
return
}
@@ -165,11 +174,16 @@
}
func generateDevicesJSON(onos string) error {
- ds := getData(onos + "/onos/v1/devices")
+ ds, err := getData(onos + "/onos/v1/devices")
+ if err != nil {
+ return err
+ }
var d devices
- err := json.Unmarshal(ds, &d)
- check(err)
+ err = json.Unmarshal(ds, &d)
+ if err != nil {
+ return unmarshalError
+ }
if len(d.Device) != c.SwitchCount {
_ = os.Remove("network-cfg.json")
@@ -192,10 +206,15 @@
}
func generateHostJSON(onos string) error {
- hs := getData(onos + "/onos/v1/hosts")
+ hs, err := getData(onos + "/onos/v1/hosts")
+ if err != nil {
+ return err
+ }
var h hosts
- err := json.Unmarshal(hs, &h)
- check(err)
+ err = json.Unmarshal(hs, &h)
+ if err != nil {
+ return unmarshalError
+ }
if len(h.Host) != c.HostCount {
_ = os.Remove("network-cfg.json")
@@ -227,13 +246,18 @@
}
-func generateLinkJSON(onos string) {
+func generateLinkJSON(onos string) error {
- links := getData(onos + "/onos/v1/links")
+ links, err := getData(onos + "/onos/v1/links")
+ if err != nil {
+ return err
+ }
var l onosLinks
- err := json.Unmarshal(links, &l)
- check(err)
+ err = json.Unmarshal(links, &l)
+ if err != nil {
+ return unmarshalError
+ }
var in []linkStructJSON
@@ -252,19 +276,25 @@
writeToFile(in, "links.tpl")
+ return nil
+
}
-func getData(url string) []byte {
+func getData(url string) ([]byte, error) {
resp, err := http.Get(url)
- check(err)
+ if err != nil {
+ return nil, errors.New("Error getting data from the URL\n")
+ }
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
- check(err)
+ if err != nil {
+ return nil, errors.New("Error reading data from response body\n")
+ }
- return body
+ return body, nil
}
diff --git a/config-generator/network-cfg.json b/config-generator/network-cfg.json
index 0fd3906..c29a6cb 100644
--- a/config-generator/network-cfg.json
+++ b/config-generator/network-cfg.json
@@ -11,21 +11,21 @@
"adjacencySids" : []
}
},
- "of:0000000000000011" : {
+ "of:0000000000000022" : {
"segmentrouting" : {
- "name" : "device-11",
+ "name" : "device-22",
"nodeSid" : 101,
- "routerIp" : "10.6.0.6",
+ "routerIp" : "10.6.0.10",
"routerMac" : "cc:37:ab:00:00:01",
"isEdgeRouter" : true,
"adjacencySids" : []
}
},
- "of:0000000000000022" : {
+ "of:0000000000000011" : {
"segmentrouting" : {
- "name" : "device-22",
+ "name" : "device-11",
"nodeSid" : 102,
- "routerIp" : "10.6.0.10",
+ "routerIp" : "10.6.0.6",
"routerMac" : "cc:37:ab:00:00:02",
"isEdgeRouter" : true,
"adjacencySids" : []
@@ -51,10 +51,10 @@
"of:0000000000000022/31-of:0000000000000011/2": {
"basic": {}
},
- "of:0000000000000022/32-of:0000000000000012/2": {
+ "of:0000000000000021/31-of:0000000000000011/1": {
"basic": {}
},
- "of:0000000000000021/31-of:0000000000000011/1": {
+ "of:0000000000000022/32-of:0000000000000012/2": {
"basic": {}
},
"of:0000000000000012/1-of:0000000000000021/32": {
@@ -73,17 +73,17 @@
"ports": {
- "of:0000000000000022/3" : {
+ "of:0000000000000021/4" : {
"interfaces": [
{
- "ips" : [ "10.6.2.254/24" ]
+ "ips" : [ "10.6.1.254/24" ]
}
]
},
- "of:0000000000000022/4" : {
+ "of:0000000000000021/3" : {
"interfaces": [
{
- "ips" : [ "10.6.2.254/24" ]
+ "ips" : [ "10.6.1.254/24" ]
}
]
},
@@ -105,16 +105,16 @@
"hosts" : {
- "3C:FD:FE:9E:95:99/-1" : {
+ "3C:FD:FE:9E:94:28/-1" : {
"basic" : {
- "ips" : ["10.6.2.3"],
- "location" : "of:0000000000000022/3"
+ "ips" : ["10.6.1.4"],
+ "location" : "of:0000000000000021/4"
}
},
- "3C:FD:FE:9E:94:29/-1" : {
+ "3C:FD:FE:9E:95:98/-1" : {
"basic" : {
- "ips" : ["10.6.2.4"],
- "location" : "of:0000000000000022/4"
+ "ips" : ["10.6.1.2"],
+ "location" : "of:0000000000000021/3"
}
},
"3C:FD:FE:9E:98:68/-1" : {