--- /dev/null
+\r
+// Helper functions for processing a NETWORK worksheet\r
+\r
+var helpers = require('./helpers.js');\r
+var _ = require('lodash');\r
+var csvtojson = require('csvtojson');\r
+var async = require('async');\r
+var uuid = require('node-uuid'); // generate a uuid with "uuid.v1()"\r
+var path = require('path');\r
+var fs = require("fs");\r
+var moment = require("moment");\r
+\r
+var network = module.exports;\r
+var getParam = helpers.getParam;\r
+\r
+var indir;\r
+var csvGeneral, csvSubnets, csvVpnBindings, csvPolicies, csvNetRoutes;\r
+var rawJson={}\r
+var finalJson={}; \r
+var platform;\r
+var req,res;\r
+var preloadVersion; // 1607, 1610, etc...\r
+\r
+puts = helpers.puts;\r
+putd = helpers.putd;\r
+\r
+network.go = function(lreq,lres,cb,dir) {\r
+ puts("Processing NETWORK workbook");\r
+ req = lreq;\r
+ res = lres;\r
+ callback = cb;\r
+ if (dir!="") {\r
+ platform="pc";\r
+ indir=dir;\r
+ } else {\r
+ platform="portal";\r
+ indir=process.cwd() + "/uploads/";\r
+ }\r
+ doGeneral();\r
+}\r
+\r
+// READ WORKSHEET: GENERAL\r
+\r
+function doGeneral() {\r
+ puts("Reading General worksheet");\r
+ var csvFilename="General.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotGeneral);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotGeneral(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('General.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvGeneral = jsonObj;\r
+ puts("\nRead this: ");\r
+ putd(csvGeneral);\r
+ puts("\n");\r
+ doSubnets();\r
+}\r
+\r
+// READ WORKSHEET: SUBNETS\r
+\r
+function doSubnets() {\r
+ puts("Reading Subnets worksheet");\r
+ var csvFilename="Subnets.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotSubnets);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotSubnets(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Subnets.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvSubnets = jsonObj;\r
+ csvSubnets = _.reject(csvSubnets, 'field2', 'Subnets');\r
+ csvSubnets = _.reject(csvSubnets, 'field2', 'start-address');\r
+ csvSubnets = _.reject(csvSubnets, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvSubnets);\r
+ puts("\n");\r
+ doVpnBindings();\r
+}\r
+\r
+// READ WORKSHEET: VPN-BINDINGS\r
+\r
+function doVpnBindings() {\r
+ puts("Reading VPN-Bindings worksheet");\r
+ var csvFilename="VPN-Bindings.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotVpnBindings);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotVpnBindings(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('VPN-Bindings.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvVpnBindings = jsonObj;\r
+ csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'VPN-Bindings');\r
+ csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'vpn-binding-id');\r
+ csvVpnBindings = _.reject(csvVpnBindings, function(o) { return (_.trim(o.field2)=="") && (_.trim(o.field3)==""); } );\r
+ puts("\nRead this: ");\r
+ putd(csvVpnBindings);\r
+ puts("\n");\r
+ doPolicies();\r
+}\r
+\r
+\r
+// READ WORKSHEET: POLICIES\r
+\r
+function doPolicies() {\r
+ puts("Reading Policies worksheet");\r
+ var csvFilename="Policies.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotPolicies);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotPolicies(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Policies.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvPolicies = jsonObj;\r
+ csvPolicies = _.reject(csvPolicies, 'field2', 'Policies');\r
+ csvPolicies = _.reject(csvPolicies, 'field2', 'network-policy-fqdn');\r
+ csvPolicies = _.reject(csvPolicies, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvPolicies);\r
+ puts("\n");\r
+ doNetRoutes();\r
+}\r
+\r
+\r
+// READ WORKSHEET: NETWORK-ROUTES\r
+\r
+function doNetRoutes() {\r
+ puts("Reading Network-Routes worksheet");\r
+ var csvFilename="Network-Routes.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
+ if ( preloadVersion == '1607' ) {\r
+ puts("This is a 1607 spreadsheet. Skipping Network-Routes.csv.");\r
+ gotNetRoutes(null,{});\r
+ return;\r
+ }\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotNetRoutes);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotNetRoutes(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Network-Routes.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvNetRoutes = jsonObj;\r
+ csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'Network-Routes');\r
+ csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'route-table-reference-fqdn');\r
+ csvNetRoutes = _.reject(csvNetRoutes, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvNetRoutes);\r
+ puts("\n");\r
+ doneReadingFiles();\r
+}\r
+\r
+\r
+// DONE READING FILES\r
+\r
+function doneReadingFiles() {\r
+ puts("\n");\r
+ puts("DONE READING FILES!");\r
+ puts("\n");\r
+ processJson();\r
+}\r
+\r
+\r
+// PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT\r
+function processJson() {\r
+ processGeneral();\r
+ processSubnets();\r
+ processVpnBindings();\r
+ processPolicies();\r
+ processNetRoutes();\r
+ assembleJson();\r
+}\r
+\r
+// ASSEMBLE AND OUTPUT RESULTS\r
+\r
+function assembleJson() {\r
+ puts("\n");\r
+ puts("Using raw JSON and assembling final ouptut JSON.");\r
+ puts("\n");\r
+\r
+ networkTopoID = { "network-name": rawJson['network-name'],\r
+ "network-role": rawJson['network-role'],\r
+ "network-type": rawJson['network-type'],\r
+ "network-technology": rawJson['network-technology'] };\r
+\r
+ providerInfo = { "physical-network-name": rawJson['physical-network-name'],\r
+ "is-provider-network": rawJson['is-provider-network'],\r
+ "is-shared-network": rawJson['is-shared-network'],\r
+ "is-external-network": rawJson['is-external-network'] };\r
+\r
+ networkSubnets = rawJson['subnets'];\r
+\r
+ networkVpnBindings = rawJson['vpn-bindings'];\r
+\r
+ networkPolicies = rawJson['network-policy-fqdns'];\r
+\r
+ networkRoutes = rawJson['route-table-reference'];\r
+\r
+ networkTopo = { "network-topology-identifier": networkTopoID,\r
+ "provider-network-information": providerInfo,\r
+ "subnets": networkSubnets,\r
+ "vpn-bindings": networkVpnBindings,\r
+ "network-policy": networkPolicies,\r
+ "route-table-reference": networkRoutes};\r
+\r
+ networkInput = {'network-topology-information': networkTopo};\r
+\r
+ finalJson = {"input": networkInput};\r
+\r
+ outputJson();\r
+}\r
+\r
+function outputJson() {\r
+ puts("\n");\r
+ puts("\n");\r
+ puts(JSON.stringify(finalJson,null,2));\r
+ puts("\n");\r
+ puts("\n");\r
+ var unixTime, fullpath_filename, filename;\r
+ unixTime = moment().unix();\r
+ if (platform=='portal') {\r
+ fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".net_worksheet.json";\r
+ filename = unixTime + ".net_worksheet.json.";\r
+ } else {\r
+ fullpath_filename = "./output.json."+unixTime;\r
+ filename = "output.json." + unixTime;\r
+ }\r
+ helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);\r
+ callback(null, finalJson, filename);\r
+}\r
+\r
+\r
+// Gather functions that actually process data after it is all read\r
+\r
+function processGeneral() {\r
+ preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
+ rawJson['preload-version'] = preloadVersion;\r
+ puts("Preload version: " + preloadVersion);\r
+\r
+ if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {\r
+ puts("\nError - incorrect version of preload worksheet.");\r
+ callback('Error - incorrect version of preload worksheet.');\r
+ }\r
+\r
+ rawJson['network-name'] = getParam(csvGeneral, 'field2', 'network-name', 'field3');\r
+ rawJson['network-role'] = getParam(csvGeneral, 'field2', 'network-role', 'field3');\r
+ rawJson['network-type'] = getParam(csvGeneral, 'field2', 'network-type', 'field3');\r
+ rawJson['network-technology'] = getParam(csvGeneral, 'field2', 'network-technology', 'field3');\r
+\r
+ if ( preloadVersion!='1607' ) {\r
+ rawJson['physical-network-name'] = getParam(csvGeneral, 'field2', 'physical-network-name', 'field3');\r
+ rawJson['is-provider-network'] = getParam(csvGeneral, 'field2', 'is-provider-network', 'field3');\r
+ rawJson['is-shared-network'] = getParam(csvGeneral, 'field2', 'is-shared-network', 'field3');\r
+ rawJson['is-external-network'] = getParam(csvGeneral, 'field2', 'is-external-network', 'field3');\r
+ }\r
+\r
+ rawJson['request-action'] = "PreloadNetworkRequest";\r
+ rawJson['svc-request-id'] = uuid.v1();\r
+ rawJson['svc-action'] = "reserve";\r
+ puts('rawJson:');\r
+ putd(rawJson);\r
+ puts("\n");\r
+}\r
+\r
+function processSubnets() {\r
+ var newSubnets = [];\r
+ csvSubnets.forEach( function(subnet) {\r
+ var subnetJson = {};\r
+ subnetJson["start-address"] = subnet.field2;\r
+ if (subnet.field3!='') {\r
+ subnetJson["dhcp-start-address"] = subnet.field3;\r
+ }\r
+ if (subnet.field4!='') {\r
+ subnetJson["dhcp-end-address"] = subnet.field4;\r
+ }\r
+ if (subnet.field5!='') {\r
+ subnetJson["gateway-address"] = subnet.field5;\r
+ }\r
+ subnetJson["cidr-mask"] = subnet.field6;\r
+ subnetJson["ip-version"] = subnet.field7;\r
+ subnetJson["dhcp-enabled"] = subnet.field8;\r
+ subnetJson["subnet-name"] = subnet.field9;\r
+ newSubnets.push(subnetJson);\r
+ }\r
+ );\r
+ puts("subnets:");\r
+ putd(newSubnets);\r
+ puts("\n");\r
+ rawJson["subnets"] = newSubnets;\r
+}\r
+\r
+function processVpnBindings() {\r
+ var newVpnBindings = [];\r
+\r
+ csvVpnBindings.forEach( function(vpn) {\r
+ var vpnJson = {};\r
+ bindid = _.trim(vpn.field2);\r
+ vpnJson["vpn-binding-id"] = bindid;\r
+ if (bindid!="") {\r
+ newVpnBindings.push(vpnJson);\r
+ }\r
+ });\r
+\r
+ puts("VPN-Bindings:");\r
+ putd(newVpnBindings);\r
+ puts("\n");\r
+ rawJson["vpn-bindings"] = newVpnBindings;\r
+}\r
+\r
+function processPolicies() {\r
+ var newPolicies = [];\r
+\r
+ csvPolicies.forEach( function(policy) {\r
+ var policyJson = {};\r
+ fqdn = _.trim(policy.field2);\r
+ if (fqdn != "") {\r
+ policyJson["network-policy-fqdn"] = fqdn;\r
+ newPolicies.push(policyJson);\r
+ }\r
+\r
+ }\r
+ );\r
+\r
+ puts("Policies:");\r
+ putd(newPolicies);\r
+ puts("\n");\r
+ rawJson["network-policy-fqdns"] = newPolicies;\r
+}\r
+\r
+function processNetRoutes() {\r
+ var newNetRoutes = [];\r
+\r
+ csvNetRoutes.forEach( function(netroute) {\r
+ var netrouteJson = {};\r
+ fqdn = _.trim(netroute.field2);\r
+ if (fqdn != "") {\r
+ netrouteJson["route-table-reference-fqdn"] = fqdn;\r
+ newNetRoutes.push(netrouteJson);\r
+ }\r
+\r
+ }\r
+ );\r
+\r
+ puts("Network-Routes:");\r
+ putd(newNetRoutes);\r
+ puts("\n");\r
+ rawJson["route-table-reference"] = newNetRoutes;\r
+}\r
+\r
+\r
+\r