2 // Helper functions for processing a NETWORK worksheet
\r
4 var helpers = require('./helpers.js');
\r
5 var _ = require('lodash');
\r
6 var csvtojson = require('csvtojson');
\r
7 var async = require('async');
\r
8 var uuid = require('node-uuid'); // generate a uuid with "uuid.v1()"
\r
9 var path = require('path');
\r
10 var fs = require("fs");
\r
11 var moment = require("moment");
\r
13 var network = module.exports;
\r
14 var getParam = helpers.getParam;
\r
17 var csvGeneral, csvSubnets, csvVpnBindings, csvPolicies, csvNetRoutes;
\r
22 var preloadVersion; // 1607, 1610, etc...
\r
23 var proc_error = false;
\r
26 puts = helpers.puts;
\r
27 putd = helpers.putd;
\r
29 network.go = function(lreq,lres,cb,dir) {
\r
30 puts("Processing NETWORK workbook");
\r
40 indir=process.cwd() + "/uploads/";
\r
45 // READ WORKSHEET: GENERAL
\r
47 function doGeneral() {
\r
48 puts("Reading General worksheet");
\r
49 var csvFilename="General.csv";
\r
50 var newFileName = helpers.getFileName(req, csvFilename);
\r
51 if ( newFileName != null ) {
\r
52 helpers.readCsv(indir, newFileName, gotGeneral);
\r
55 puts('general file is missing from upload.');
\r
60 function gotGeneral(err, jsonObj) {
\r
65 callback('General.csv file is missing from upload.');
\r
68 csvGeneral = jsonObj;
\r
69 puts("\nRead this: ");
\r
75 // READ WORKSHEET: SUBNETS
\r
77 function doSubnets() {
\r
78 puts("Reading Subnets worksheet");
\r
79 var csvFilename="Subnets.csv";
\r
80 var newFileName = helpers.getFileName(req, csvFilename);
\r
81 if ( newFileName != null ) {
\r
82 helpers.readCsv(indir, newFileName, gotSubnets);
\r
85 puts('subnets file is missing from upload.');
\r
87 callback(csvFilename + ' file is missing from upload.');
\r
92 function gotSubnets(err, jsonObj) {
\r
97 callback('Subnets.csv file is missing from upload.');
\r
100 csvSubnets = jsonObj;
\r
101 csvSubnets = _.reject(csvSubnets, 'field2', 'Subnets');
\r
102 csvSubnets = _.reject(csvSubnets, 'field2', 'start-address');
\r
103 csvSubnets = _.reject(csvSubnets, 'field2', '');
\r
104 puts("\nRead this: ");
\r
110 // READ WORKSHEET: VPN-BINDINGS
\r
112 function doVpnBindings() {
\r
113 puts("Reading VPN-Bindings worksheet");
\r
114 var csvFilename="VPN-Bindings.csv";
\r
115 var newFileName = helpers.getFileName(req, csvFilename);
\r
116 if ( newFileName != null ) {
\r
117 helpers.readCsv(indir, newFileName, gotVpnBindings);
\r
120 puts('vnp-bindings file is missing from upload.');
\r
122 callback(csvFilename + ' file is missing from upload.');
\r
127 function gotVpnBindings(err, jsonObj) {
\r
132 callback('VPN-Bindings.csv file is missing from upload.');
\r
135 csvVpnBindings = jsonObj;
\r
136 csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'VPN-Bindings');
\r
137 csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'vpn-binding-id');
\r
138 csvVpnBindings = _.reject(csvVpnBindings, function(o) { return (_.trim(o.field2)=="") && (_.trim(o.field3)==""); } );
\r
139 puts("\nRead this: ");
\r
140 putd(csvVpnBindings);
\r
146 // READ WORKSHEET: POLICIES
\r
148 function doPolicies() {
\r
149 puts("Reading Policies worksheet");
\r
150 var csvFilename="Policies.csv";
\r
151 var newFileName = helpers.getFileName(req, csvFilename);
\r
152 if ( newFileName != null ) {
\r
153 helpers.readCsv(indir, newFileName, gotPolicies);
\r
156 puts('policies file is missing from upload.');
\r
158 callback(csvFilename + ' file is missing from upload.');
\r
163 function gotPolicies(err, jsonObj) {
\r
168 callback('Policies.csv file is missing from upload.');
\r
171 csvPolicies = jsonObj;
\r
172 csvPolicies = _.reject(csvPolicies, 'field2', 'Policies');
\r
173 csvPolicies = _.reject(csvPolicies, 'field2', 'network-policy-fqdn');
\r
174 csvPolicies = _.reject(csvPolicies, 'field2', '');
\r
175 puts("\nRead this: ");
\r
182 // READ WORKSHEET: NETWORK-ROUTES
\r
184 function doNetRoutes() {
\r
185 puts("Reading Network-Routes worksheet");
\r
186 var csvFilename="Network-Routes.csv";
\r
187 var newFileName = helpers.getFileName(req, csvFilename);
\r
188 preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');
\r
189 if ( preloadVersion == '1607' ) {
\r
190 puts("This is a 1607 spreadsheet. Skipping Network-Routes.csv.");
\r
191 gotNetRoutes(null,{});
\r
194 if ( newFileName != null ) {
\r
195 helpers.readCsv(indir, newFileName, gotNetRoutes);
\r
198 puts('network-routes file is missing from upload.');
\r
200 callback(csvFilename + ' file is missing from upload.');
\r
205 function gotNetRoutes(err, jsonObj) {
\r
210 callback('Network-Routes.csv file is missing from upload.');
\r
213 csvNetRoutes = jsonObj;
\r
214 csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'Network-Routes');
\r
215 csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'route-table-reference-fqdn');
\r
216 csvNetRoutes = _.reject(csvNetRoutes, 'field2', '');
\r
217 puts("\nRead this: ");
\r
218 putd(csvNetRoutes);
\r
220 doneReadingFiles();
\r
224 // DONE READING FILES
\r
226 function doneReadingFiles() {
\r
228 puts("DONE READING FILES!");
\r
234 // PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT
\r
235 function processJson() {
\r
238 processVpnBindings();
\r
240 processNetRoutes();
\r
244 puts('proc_error=');
\r
247 puts('callback with failure');
\r
248 callback('Error was encountered processing upload.');
\r
253 puts('callback with success');
\r
254 callback(null, finalJson, filename);
\r
259 // ASSEMBLE AND OUTPUT RESULTS
\r
261 function assembleJson() {
\r
263 puts("Using raw JSON and assembling final ouptut JSON.");
\r
266 networkTopoID = { "network-name": rawJson['network-name'],
\r
267 "network-role": rawJson['network-role'],
\r
268 "network-type": rawJson['network-type'],
\r
269 "network-technology": rawJson['network-technology'] };
\r
271 providerInfo = { "physical-network-name": rawJson['physical-network-name'],
\r
272 "is-provider-network": rawJson['is-provider-network'],
\r
273 "is-shared-network": rawJson['is-shared-network'],
\r
274 "is-external-network": rawJson['is-external-network'] };
\r
276 networkSubnets = rawJson['subnets'];
\r
278 networkVpnBindings = rawJson['vpn-bindings'];
\r
280 networkPolicies = rawJson['network-policy-fqdns'];
\r
282 networkRoutes = rawJson['route-table-reference'];
\r
284 networkTopo = { "network-topology-identifier": networkTopoID,
\r
285 "provider-network-information": providerInfo,
\r
286 "subnets": networkSubnets,
\r
287 "vpn-bindings": networkVpnBindings,
\r
288 "network-policy": networkPolicies,
\r
289 "route-table-reference": networkRoutes};
\r
291 networkInput = {'network-topology-information': networkTopo};
\r
293 finalJson = {"input": networkInput};
\r
298 function outputJson() {
\r
301 puts(JSON.stringify(finalJson,null,2));
\r
304 var unixTime, fullpath_filename;
\r
305 unixTime = moment().unix();
\r
306 if (platform=='portal') {
\r
307 fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".net_worksheet.json";
\r
308 filename = unixTime + ".net_worksheet.json.";
\r
310 fullpath_filename = "./output.json."+unixTime;
\r
311 filename = "output.json." + unixTime;
\r
313 helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);
\r
314 //callback(null, finalJson, filename);
\r
318 // Gather functions that actually process data after it is all read
\r
320 function processGeneral() {
\r
321 preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');
\r
322 rawJson['preload-version'] = preloadVersion;
\r
323 puts("Preload version: " + preloadVersion);
\r
325 if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {
\r
326 puts("\nError - incorrect version of preload worksheet.");
\r
328 //callback('Error - incorrect version of preload worksheet.');
\r
332 rawJson['network-name'] = getParam(csvGeneral, 'field2', 'network-name', 'field3');
\r
333 rawJson['network-role'] = getParam(csvGeneral, 'field2', 'network-role', 'field3');
\r
334 rawJson['network-type'] = getParam(csvGeneral, 'field2', 'network-type', 'field3');
\r
335 rawJson['network-technology'] = getParam(csvGeneral, 'field2', 'network-technology', 'field3');
\r
337 if ( preloadVersion!='1607' ) {
\r
338 rawJson['physical-network-name'] = getParam(csvGeneral, 'field2', 'physical-network-name', 'field3');
\r
339 rawJson['is-provider-network'] = getParam(csvGeneral, 'field2', 'is-provider-network', 'field3');
\r
340 rawJson['is-shared-network'] = getParam(csvGeneral, 'field2', 'is-shared-network', 'field3');
\r
341 rawJson['is-external-network'] = getParam(csvGeneral, 'field2', 'is-external-network', 'field3');
\r
344 rawJson['request-action'] = "PreloadNetworkRequest";
\r
345 rawJson['svc-request-id'] = uuid.v1();
\r
346 rawJson['svc-action'] = "reserve";
\r
352 function processSubnets() {
\r
353 var newSubnets = [];
\r
354 csvSubnets.forEach( function(subnet) {
\r
355 var subnetJson = {};
\r
356 subnetJson["start-address"] = subnet.field2;
\r
357 if (subnet.field3!='') {
\r
358 subnetJson["dhcp-start-address"] = subnet.field3;
\r
360 if (subnet.field4!='') {
\r
361 subnetJson["dhcp-end-address"] = subnet.field4;
\r
363 if (subnet.field5!='') {
\r
364 subnetJson["gateway-address"] = subnet.field5;
\r
366 subnetJson["cidr-mask"] = subnet.field6;
\r
367 subnetJson["ip-version"] = subnet.field7;
\r
368 subnetJson["dhcp-enabled"] = subnet.field8;
\r
369 subnetJson["subnet-name"] = subnet.field9;
\r
370 newSubnets.push(subnetJson);
\r
376 rawJson["subnets"] = newSubnets;
\r
379 function processVpnBindings() {
\r
380 var newVpnBindings = [];
\r
382 csvVpnBindings.forEach( function(vpn) {
\r
384 bindid = _.trim(vpn.field2);
\r
385 vpnJson["vpn-binding-id"] = bindid;
\r
387 newVpnBindings.push(vpnJson);
\r
391 puts("VPN-Bindings:");
\r
392 putd(newVpnBindings);
\r
394 rawJson["vpn-bindings"] = newVpnBindings;
\r
397 function processPolicies() {
\r
398 var newPolicies = [];
\r
400 csvPolicies.forEach( function(policy) {
\r
401 var policyJson = {};
\r
402 fqdn = _.trim(policy.field2);
\r
404 policyJson["network-policy-fqdn"] = fqdn;
\r
405 newPolicies.push(policyJson);
\r
414 rawJson["network-policy-fqdns"] = newPolicies;
\r
417 function processNetRoutes() {
\r
418 var newNetRoutes = [];
\r
420 csvNetRoutes.forEach( function(netroute) {
\r
421 var netrouteJson = {};
\r
422 fqdn = _.trim(netroute.field2);
\r
424 netrouteJson["route-table-reference-fqdn"] = fqdn;
\r
425 newNetRoutes.push(netrouteJson);
\r
431 puts("Network-Routes:");
\r
432 putd(newNetRoutes);
\r
434 rawJson["route-table-reference"] = newNetRoutes;
\r