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
24 puts = helpers.puts;
\r
25 putd = helpers.putd;
\r
27 network.go = function(lreq,lres,cb,dir) {
\r
28 puts("Processing NETWORK workbook");
\r
37 indir=process.cwd() + "/uploads/";
\r
42 // READ WORKSHEET: GENERAL
\r
44 function doGeneral() {
\r
45 puts("Reading General worksheet");
\r
46 var csvFilename="General.csv";
\r
47 var newFileName = helpers.getFileName(req, csvFilename);
\r
48 if ( newFileName != null ) {
\r
49 helpers.readCsv(indir, newFileName, gotGeneral);
\r
52 callback(csvFilename + ' file is missing from upload.');
\r
56 function gotGeneral(err, jsonObj) {
\r
60 callback('General.csv file is missing from upload.');
\r
63 csvGeneral = jsonObj;
\r
64 puts("\nRead this: ");
\r
70 // READ WORKSHEET: SUBNETS
\r
72 function doSubnets() {
\r
73 puts("Reading Subnets worksheet");
\r
74 var csvFilename="Subnets.csv";
\r
75 var newFileName = helpers.getFileName(req, csvFilename);
\r
76 if ( newFileName != null ) {
\r
77 helpers.readCsv(indir, newFileName, gotSubnets);
\r
80 callback(csvFilename + ' file is missing from upload.');
\r
84 function gotSubnets(err, jsonObj) {
\r
88 callback('Subnets.csv file is missing from upload.');
\r
91 csvSubnets = jsonObj;
\r
92 csvSubnets = _.reject(csvSubnets, 'field2', 'Subnets');
\r
93 csvSubnets = _.reject(csvSubnets, 'field2', 'start-address');
\r
94 csvSubnets = _.reject(csvSubnets, 'field2', '');
\r
95 puts("\nRead this: ");
\r
101 // READ WORKSHEET: VPN-BINDINGS
\r
103 function doVpnBindings() {
\r
104 puts("Reading VPN-Bindings worksheet");
\r
105 var csvFilename="VPN-Bindings.csv";
\r
106 var newFileName = helpers.getFileName(req, csvFilename);
\r
107 if ( newFileName != null ) {
\r
108 helpers.readCsv(indir, newFileName, gotVpnBindings);
\r
111 callback(csvFilename + ' file is missing from upload.');
\r
115 function gotVpnBindings(err, jsonObj) {
\r
119 callback('VPN-Bindings.csv file is missing from upload.');
\r
122 csvVpnBindings = jsonObj;
\r
123 csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'VPN-Bindings');
\r
124 csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'vpn-binding-id');
\r
125 csvVpnBindings = _.reject(csvVpnBindings, function(o) { return (_.trim(o.field2)=="") && (_.trim(o.field3)==""); } );
\r
126 puts("\nRead this: ");
\r
127 putd(csvVpnBindings);
\r
133 // READ WORKSHEET: POLICIES
\r
135 function doPolicies() {
\r
136 puts("Reading Policies worksheet");
\r
137 var csvFilename="Policies.csv";
\r
138 var newFileName = helpers.getFileName(req, csvFilename);
\r
139 if ( newFileName != null ) {
\r
140 helpers.readCsv(indir, newFileName, gotPolicies);
\r
143 callback(csvFilename + ' file is missing from upload.');
\r
147 function gotPolicies(err, jsonObj) {
\r
151 callback('Policies.csv file is missing from upload.');
\r
154 csvPolicies = jsonObj;
\r
155 csvPolicies = _.reject(csvPolicies, 'field2', 'Policies');
\r
156 csvPolicies = _.reject(csvPolicies, 'field2', 'network-policy-fqdn');
\r
157 csvPolicies = _.reject(csvPolicies, 'field2', '');
\r
158 puts("\nRead this: ");
\r
165 // READ WORKSHEET: NETWORK-ROUTES
\r
167 function doNetRoutes() {
\r
168 puts("Reading Network-Routes worksheet");
\r
169 var csvFilename="Network-Routes.csv";
\r
170 var newFileName = helpers.getFileName(req, csvFilename);
\r
171 preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');
\r
172 if ( preloadVersion == '1607' ) {
\r
173 puts("This is a 1607 spreadsheet. Skipping Network-Routes.csv.");
\r
174 gotNetRoutes(null,{});
\r
177 if ( newFileName != null ) {
\r
178 helpers.readCsv(indir, newFileName, gotNetRoutes);
\r
181 callback(csvFilename + ' file is missing from upload.');
\r
185 function gotNetRoutes(err, jsonObj) {
\r
189 callback('Network-Routes.csv file is missing from upload.');
\r
192 csvNetRoutes = jsonObj;
\r
193 csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'Network-Routes');
\r
194 csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'route-table-reference-fqdn');
\r
195 csvNetRoutes = _.reject(csvNetRoutes, 'field2', '');
\r
196 puts("\nRead this: ");
\r
197 putd(csvNetRoutes);
\r
199 doneReadingFiles();
\r
203 // DONE READING FILES
\r
205 function doneReadingFiles() {
\r
207 puts("DONE READING FILES!");
\r
213 // PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT
\r
214 function processJson() {
\r
217 processVpnBindings();
\r
219 processNetRoutes();
\r
223 // ASSEMBLE AND OUTPUT RESULTS
\r
225 function assembleJson() {
\r
227 puts("Using raw JSON and assembling final ouptut JSON.");
\r
230 networkTopoID = { "network-name": rawJson['network-name'],
\r
231 "network-role": rawJson['network-role'],
\r
232 "network-type": rawJson['network-type'],
\r
233 "network-technology": rawJson['network-technology'] };
\r
235 providerInfo = { "physical-network-name": rawJson['physical-network-name'],
\r
236 "is-provider-network": rawJson['is-provider-network'],
\r
237 "is-shared-network": rawJson['is-shared-network'],
\r
238 "is-external-network": rawJson['is-external-network'] };
\r
240 networkSubnets = rawJson['subnets'];
\r
242 networkVpnBindings = rawJson['vpn-bindings'];
\r
244 networkPolicies = rawJson['network-policy-fqdns'];
\r
246 networkRoutes = rawJson['route-table-reference'];
\r
248 networkTopo = { "network-topology-identifier": networkTopoID,
\r
249 "provider-network-information": providerInfo,
\r
250 "subnets": networkSubnets,
\r
251 "vpn-bindings": networkVpnBindings,
\r
252 "network-policy": networkPolicies,
\r
253 "route-table-reference": networkRoutes};
\r
255 networkInput = {'network-topology-information': networkTopo};
\r
257 finalJson = {"input": networkInput};
\r
262 function outputJson() {
\r
265 puts(JSON.stringify(finalJson,null,2));
\r
268 var unixTime, fullpath_filename, filename;
\r
269 unixTime = moment().unix();
\r
270 if (platform=='portal') {
\r
271 fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".net_worksheet.json";
\r
272 filename = unixTime + ".net_worksheet.json.";
\r
274 fullpath_filename = "./output.json."+unixTime;
\r
275 filename = "output.json." + unixTime;
\r
277 helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);
\r
278 callback(null, finalJson, filename);
\r
282 // Gather functions that actually process data after it is all read
\r
284 function processGeneral() {
\r
285 preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');
\r
286 rawJson['preload-version'] = preloadVersion;
\r
287 puts("Preload version: " + preloadVersion);
\r
289 if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {
\r
290 puts("\nError - incorrect version of preload worksheet.");
\r
291 callback('Error - incorrect version of preload worksheet.');
\r
294 rawJson['network-name'] = getParam(csvGeneral, 'field2', 'network-name', 'field3');
\r
295 rawJson['network-role'] = getParam(csvGeneral, 'field2', 'network-role', 'field3');
\r
296 rawJson['network-type'] = getParam(csvGeneral, 'field2', 'network-type', 'field3');
\r
297 rawJson['network-technology'] = getParam(csvGeneral, 'field2', 'network-technology', 'field3');
\r
299 if ( preloadVersion!='1607' ) {
\r
300 rawJson['physical-network-name'] = getParam(csvGeneral, 'field2', 'physical-network-name', 'field3');
\r
301 rawJson['is-provider-network'] = getParam(csvGeneral, 'field2', 'is-provider-network', 'field3');
\r
302 rawJson['is-shared-network'] = getParam(csvGeneral, 'field2', 'is-shared-network', 'field3');
\r
303 rawJson['is-external-network'] = getParam(csvGeneral, 'field2', 'is-external-network', 'field3');
\r
306 rawJson['request-action'] = "PreloadNetworkRequest";
\r
307 rawJson['svc-request-id'] = uuid.v1();
\r
308 rawJson['svc-action'] = "reserve";
\r
314 function processSubnets() {
\r
315 var newSubnets = [];
\r
316 csvSubnets.forEach( function(subnet) {
\r
317 var subnetJson = {};
\r
318 subnetJson["start-address"] = subnet.field2;
\r
319 if (subnet.field3!='') {
\r
320 subnetJson["dhcp-start-address"] = subnet.field3;
\r
322 if (subnet.field4!='') {
\r
323 subnetJson["dhcp-end-address"] = subnet.field4;
\r
325 if (subnet.field5!='') {
\r
326 subnetJson["gateway-address"] = subnet.field5;
\r
328 subnetJson["cidr-mask"] = subnet.field6;
\r
329 subnetJson["ip-version"] = subnet.field7;
\r
330 subnetJson["dhcp-enabled"] = subnet.field8;
\r
331 subnetJson["subnet-name"] = subnet.field9;
\r
332 newSubnets.push(subnetJson);
\r
338 rawJson["subnets"] = newSubnets;
\r
341 function processVpnBindings() {
\r
342 var newVpnBindings = [];
\r
344 csvVpnBindings.forEach( function(vpn) {
\r
346 bindid = _.trim(vpn.field2);
\r
347 vpnJson["vpn-binding-id"] = bindid;
\r
349 newVpnBindings.push(vpnJson);
\r
353 puts("VPN-Bindings:");
\r
354 putd(newVpnBindings);
\r
356 rawJson["vpn-bindings"] = newVpnBindings;
\r
359 function processPolicies() {
\r
360 var newPolicies = [];
\r
362 csvPolicies.forEach( function(policy) {
\r
363 var policyJson = {};
\r
364 fqdn = _.trim(policy.field2);
\r
366 policyJson["network-policy-fqdn"] = fqdn;
\r
367 newPolicies.push(policyJson);
\r
376 rawJson["network-policy-fqdns"] = newPolicies;
\r
379 function processNetRoutes() {
\r
380 var newNetRoutes = [];
\r
382 csvNetRoutes.forEach( function(netroute) {
\r
383 var netrouteJson = {};
\r
384 fqdn = _.trim(netroute.field2);
\r
386 netrouteJson["route-table-reference-fqdn"] = fqdn;
\r
387 newNetRoutes.push(netrouteJson);
\r
393 puts("Network-Routes:");
\r
394 putd(newNetRoutes);
\r
396 rawJson["route-table-reference"] = newNetRoutes;
\r