--- /dev/null
+\r
+// Helper functions for processing a VNF 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 vnf = module.exports;\r
+var getParam = helpers.getParam;\r
+\r
+var callback;\r
+var indir;\r
+var csvGeneral, csvZones, csvNetworks, csvVMs, csvVMnetworks, csvVMnetworkIPs, csvVMnetworkMACs, csvTagValues;\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
+vnf.go = function(lreq,lres,cb,dir){\r
+ puts("Processing VNF 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
+\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
+ doAvailZones();\r
+}\r
+\r
+// READ WORKSHEET: AVAILABILITY ZONES\r
+\r
+function doAvailZones() {\r
+ puts("Reading Availability-zones worksheet");\r
+ var csvFilename="Availability-zones.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotAvailZones);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotAvailZones(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Availability-zones.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvZones = jsonObj;\r
+ csvZones = _.reject(csvZones, 'field2', 'Availability Zones');\r
+ csvZones = _.reject(csvZones, 'field2', 'List the availability zones for this VNF');\r
+ csvZones = _.reject(csvZones, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvZones);\r
+ puts("\n");\r
+ doNetworks();\r
+}\r
+\r
+// READ WORKSHEET: NETWORKS\r
+\r
+function doNetworks() {\r
+ puts("Reading Networks worksheet");\r
+ var csvFilename="Networks.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotNetworks);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotNetworks(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Networks.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvNetworks = jsonObj;\r
+ csvNetworks = _.reject(csvNetworks, 'field2', 'Networks');\r
+ csvNetworks = _.reject(csvNetworks, 'field2', 'List the VNF networks. (VM-networks are on a different worksheet.)');\r
+ csvNetworks = _.reject(csvNetworks, 'field2', 'network-role');\r
+ csvNetworks = _.reject(csvNetworks, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvNetworks);\r
+ puts("\n");\r
+ doVMs();\r
+}\r
+\r
+// READ WORKSHEET: VMs\r
+\r
+function doVMs() {\r
+ puts("Reading VMs worksheet");\r
+ var csvFilename="VMs.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotVMs);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotVMs(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('VMs.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvVMs = jsonObj;\r
+ csvVMs = _.reject(csvVMs, 'field2', 'VMs');\r
+ csvVMs = _.reject(csvVMs, 'field2', 'List the VM types for this VNF');\r
+ csvVMs = _.reject(csvVMs, 'field2', 'vm-type');\r
+ csvVMs = _.reject(csvVMs, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvVMs);\r
+ puts("\n");\r
+ doVMnetworks();\r
+}\r
+\r
+// READ WORKSHEET: VM-NETWORKS\r
+\r
+function doVMnetworks() {\r
+ puts("Reading VM-networks worksheet");\r
+ var csvFilename="VM-networks.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotVMnetworks);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotVMnetworks(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('VM-networks.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvVMnetworks = jsonObj;\r
+ csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'VM-networks');\r
+ csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'List the VM-networks for each VM type');\r
+ csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'vm-type');\r
+ csvVMnetworks = _.reject(csvVMnetworks, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvVMnetworks);\r
+ puts("\n");\r
+ doVMnetworkIPs();\r
+}\r
+\r
+// READ WORKSHEET: VM-NETWORK-IPS\r
+\r
+function doVMnetworkIPs() {\r
+ puts("Reading VM-network-IPs worksheet");\r
+ var csvFilename="VM-network-IPs.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotVMnetworkIPs);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotVMnetworkIPs(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('VM-network-IPs.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvVMnetworkIPs = jsonObj;\r
+ csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'VM-network-IPs');\r
+ csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'List the IPs assigned to each VM-network');\r
+ csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'vm-type');\r
+ csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvVMnetworkIPs);\r
+ puts("\n");\r
+ doVMnetworkMACs();\r
+}\r
+\r
+// READ WORKSHEET: VM-NETWORK-MACS\r
+\r
+function doVMnetworkMACs() {\r
+ puts("Reading VM-network-MACs worksheet");\r
+ var csvFilename="VM-network-MACs.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotVMnetworkMACs);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotVMnetworkMACs(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('VM-network-MACs.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvVMnetworkMACs = jsonObj;\r
+ csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'VM-network-MACs');\r
+ csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'List the MACs assigned to each VM-network');\r
+ csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'vm-type');\r
+ csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvVMnetworkMACs);\r
+ puts("\n");\r
+ doTagValues();\r
+}\r
+\r
+// READ WORKSHEET: TAG-VALUES\r
+\r
+function doTagValues() {\r
+ puts("Reading Tag-values worksheet");\r
+ var csvFilename="Tag-values.csv";\r
+ var newFileName = helpers.getFileName(req, csvFilename);\r
+ if ( newFileName != null ) {\r
+ helpers.readCsv(indir, newFileName, gotTagValues);\r
+ }\r
+ else {\r
+ callback(csvFilename + ' file is missing from upload.');\r
+ }\r
+}\r
+\r
+function gotTagValues(err, jsonObj) {\r
+ if (err) {\r
+ puts("\nError!");\r
+ putd(err);\r
+ callback('Tag-values.csv file is missing from upload.');\r
+ return;\r
+ }\r
+ csvTagValues = jsonObj;\r
+ csvTagValues = _.reject(csvTagValues, 'field2', 'Tag-values');\r
+ csvTagValues = _.reject(csvTagValues, 'field2', 'Extra data to be passed into the HEAT template for this VNF');\r
+ csvTagValues = _.reject(csvTagValues, 'field2', 'vnf-parameter-name');\r
+ csvTagValues = _.reject(csvTagValues, 'field2', 'vnf-parameter-value');\r
+ csvTagValues = _.reject(csvTagValues, 'field2', '');\r
+ puts("\nRead this: ");\r
+ putd(csvTagValues);\r
+ puts("\n");\r
+ doneReadingFiles();\r
+}\r
+\r
+\r
+\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
+ processAvailZones();\r
+ processNetworks();\r
+ processVMnetworks();\r
+ processVMnetips();\r
+ processVMnetmacs();\r
+ processVMs();\r
+ processTagValues();\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
+ vnfTopoID = { "service-type": "SDN-MOBILITY",\r
+ "vnf-name": rawJson['vf-module-name'],\r
+ "vnf-type": rawJson['vf-module-model-name'], \r
+ "generic-vnf-name": rawJson['generic-vnf-name'], \r
+ "generic-vnf-type": rawJson['generic-vnf-type'] };\r
+\r
+ vnfZones = rawJson['availability-zones'];\r
+\r
+ vnfNetworks = rawJson['networks'];\r
+\r
+ vnfVMs = rawJson['vms'];\r
+\r
+ vnfParams = rawJson['tag-values'];\r
+\r
+ vnfAssignments = { "availability-zones": vnfZones,\r
+ "vnf-networks": vnfNetworks,\r
+ "vnf-vms": vnfVMs};\r
+\r
+ vnfTopo = { "vnf-topology-identifier": vnfTopoID,\r
+ "vnf-assignments": vnfAssignments,\r
+ "vnf-parameters": vnfParams };\r
+\r
+ vnfInput = {'vnf-topology-information': vnfTopo}; \r
+\r
+ finalJson = {"input": vnfInput};\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 + ".vnf_worksheet.json";\r
+ filename = unixTime + ".vnf_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
+\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['vf-module-name'] = getParam(csvGeneral, 'field2', 'vf-module-name', 'field3');\r
+ // rawJson['vf-module-type'] = getParam(csvGeneral, 'field2', 'vf-module-type', 'field3');\r
+ try {\r
+ rawJson['vf-module-model-name'] = getParam(csvGeneral, 'field2', 'vf-module-model-name', 'field3');\r
+ } catch (e) {\r
+ puts("\n\n");\r
+ puts("ERROR ERROR ERROR ERROR ERROR\n");\r
+ puts("Failed to find data field 'vf-module-model-name'. Maybe this preload worksheet is older?")\r
+ puts("If on the 'general' tab there is a field called 'vf-module-type' please rename it to 'vf-module-model-name'");\r
+ puts("\n\n");\r
+ process.exit();\r
+ }\r
+ rawJson['generic-vnf-name'] = getParam(csvGeneral, 'field2', 'vnf-name', 'field3');\r
+ rawJson['generic-vnf-type'] = getParam(csvGeneral, 'field2', 'vnf-type', 'field3');\r
+ rawJson['request-id'] = uuid.v1();\r
+ rawJson['source'] = "ADMINPORTAL";\r
+ rawJson['request-action'] = "PreloadVNFRequest";\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 processAvailZones() {\r
+ var newZones = _.map(csvZones, function(x) { return {'availability-zone': x['field2']}; } );\r
+ rawJson['availability-zones'] = newZones;\r
+ puts("Availability zones read:");\r
+ putd(rawJson['availability-zones']);\r
+ puts("\n");\r
+}\r
+\r
+function processNetworks() {\r
+ var newNetworks = [];\r
+ csvNetworks.forEach( function(network) {\r
+ var netJson = {};\r
+ netJson["network-role"] = network.field2;\r
+ netJson["network-name"] = network.field3;\r
+ netJson["network-id"] = network.field4;\r
+ netJson["contrail-network-fqdn"] = network.field5;\r
+ netJson["subnet-name"] = network.field6;\r
+ netJson["subnet-id"] = network.field7;\r
+ netJson["ipv6-subnet-name"] = network.field8;\r
+ netJson["ipv6-subnet-id"] = network.field9;\r
+ newNetworks.push(netJson);\r
+ }\r
+ );\r
+ puts("networks:");\r
+ putd(newNetworks);\r
+ rawJson["networks"] = newNetworks;\r
+}\r
+\r
+function processVMs() {\r
+ var newVMs = [];\r
+ csvVMs.forEach( function(vm) {\r
+ var vmJson = {};\r
+ vmJson["vm-type"] = vm.field2;\r
+ vmJson["vm-name"] = vm.field3;\r
+ newVMs.push(vmJson);\r
+ }\r
+ );\r
+\r
+ puts("VMs:");\r
+ putd(newVMs);\r
+\r
+ // OK, now for each type, get count and then build vm-names array of the names\r
+ var vnfvms=[]\r
+ vmTypes = _.uniq(_.pluck(newVMs,'vm-type'));\r
+ vmTypes.forEach( function(vmType) {\r
+ puts(vmType);\r
+ var vmJson={};\r
+ var vmThisType;\r
+ var vmCount;\r
+ var vmNames=[];\r
+ var tmpNames;\r
+ vmThisType=_.select(newVMs, 'vm-type', vmType);\r
+ vmCount=vmThisType.length;\r
+ vmJson["vm-type"] = vmType;\r
+ vmJson["vm-count"] = vmCount;\r
+ tmpNames = _.pluck(vmThisType,'vm-name');\r
+ vmJson["vm-names"] = _.map(tmpNames, function(nam) { return {"vm-name": nam}; } );\r
+ netroles = _.select( rawJson["vm-networks"], "vm-type", vmType );\r
+ newnetroles=[]\r
+ netroles.forEach( function(netrole) {\r
+ tmpNetDetails = {};\r
+ tmpNetDetails["network-role"] = netrole["network-role"];\r
+ tmpNetDetails["use-dhcp"] = netrole["use-dhcp"];\r
+\r
+ var tmpipsThisVmType=[];\r
+ tmpipsThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);\r
+ var tmpips=[];\r
+ tmpips = _.select( tmpipsThisVmType, "network-role", netrole["network-role"]);\r
+ tmpipsJson = _.map(tmpips, function(ip) { return {"ip-address": ip["ip-address"]} } );\r
+ tmpipsJson = _.reject(tmpipsJson, function(o) { return (o["ip-address"]==undefined); } );\r
+ tmpNetDetails["network-ips"] = tmpipsJson;\r
+\r
+ var tmpipsv6ThisVmType=[];\r
+ tmpipsv6ThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);\r
+ var tmpipsv6=[];\r
+ tmpipsv6 = _.select( tmpipsv6ThisVmType, "network-role", netrole["network-role"]);\r
+ tmpipsv6Json = _.map(tmpipsv6, function(ip) { return {"ip-address-ipv6": ip["ipv6-address"]} } );\r
+ tmpipsv6Json = _.reject(tmpipsv6Json, function(o) { return (o["ip-address-ipv6"]==undefined); } );\r
+ tmpNetDetails["network-ips-v6"] = tmpipsv6Json;\r
+\r
+ var tmpirpThisVmType=[];\r
+ tmpirpThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);\r
+ var tmpirp=[];\r
+ tmpirp = _.select( tmpirpThisVmType, "network-role", netrole["network-role"]);\r
+ tmpirpJson = _.map(tmpirp, function(irp) { return {"interface-route-prefix-cidr": irp["interface-route-prefix"]} } );\r
+ tmpirpJson = _.reject(tmpirpJson, function(o) { return (o["interface-route-prefix-cidr"]==undefined); } );\r
+ tmpNetDetails["interface-route-prefixes"] = tmpirpJson;\r
+\r
+ var tmpmacsThisVmType=[];\r
+ tmpmacsThisVmType = _.select( rawJson["vm-net-macs"], "vm-type", vmType);\r
+ var tmpmacs=[];\r
+ tmpmacs = _.select( tmpmacsThisVmType, "network-role", netrole["network-role"]);\r
+ tmpmacsJson = _.map(tmpmacs, function(mac) { return {"mac-address": mac["mac-address"]} } );\r
+ tmpNetDetails["network-macs"] = tmpmacsJson;\r
+\r
+ var fip='';\r
+ fip = netrole["floating-ip"];\r
+ fip = _.trim(fip);\r
+ if (fip != '') {\r
+ tmpNetDetails["floating-ip"] = netrole["floating-ip"];\r
+ }\r
+\r
+ var fipv6='';\r
+ fipv6 = netrole["floating-ip-v6"];\r
+ fipv6 = _.trim(fipv6);\r
+ if (fipv6 != '') {\r
+ tmpNetDetails["floating-ip-v6"] = netrole["floating-ip-v6"];\r
+ }\r
+\r
+ newnetroles.push(tmpNetDetails);\r
+ }\r
+ );\r
+ vmJson["vm-networks"] = newnetroles;\r
+ putd(vmJson);\r
+ vnfvms.push(vmJson);\r
+ }\r
+ );\r
+ rawJson["vms"] = vnfvms;\r
+}\r
+\r
+function processVMnetworks() {\r
+ // For each VM type, for each Network role, get details like use-dhcp\r
+ var newVMnetworks = [];\r
+ csvVMnetworks.forEach( function(vm) {\r
+ var newvmJson = {};\r
+ newvmJson["vm-type"] = vm.field2;\r
+ newvmJson["network-role"] = vm.field3;\r
+ newvmJson["use-dhcp"] = vm.field4;\r
+ newvmJson["floating-ip"] = vm.field5;\r
+ newvmJson["floating-ip-v6"] = vm.field6;\r
+ newVMnetworks.push(newvmJson);\r
+ }\r
+ );\r
+ rawJson["vm-networks"] = newVMnetworks;\r
+ puts("rawJson for vm-networks...");\r
+ putd( rawJson["vm-networks"] );\r
+}\r
+\r
+\r
+function processVMnetips() {\r
+ // For each VM type, for each network role, get the set of network IPs\r
+ puts("Processing VM-net-ips");\r
+ var newVMnetips = [];\r
+ csvVMnetworkIPs.forEach( function(vm) {\r
+ var newvmnetipsJson = {};\r
+ newvmnetipsJson["vm-type"] = vm.field2;\r
+ newvmnetipsJson["network-role"] = vm.field3;\r
+ if (_.trim(vm.field4)!="") { \r
+ newvmnetipsJson["ip-address"] = vm.field4;\r
+ }\r
+ if (_.trim(vm.field5)!="") { \r
+ newvmnetipsJson["ipv6-address"] = vm.field5;\r
+ }\r
+ if (_.trim(vm.field6)!="") { \r
+ newvmnetipsJson["interface-route-prefix"] = vm.field6;\r
+ }\r
+ newVMnetips.push(newvmnetipsJson);\r
+ }\r
+ );\r
+ rawJson["vm-net-ips"] = newVMnetips;\r
+ puts("rawJson for vm-net-ips");\r
+ putd(rawJson["vm-net-ips"]);\r
+}\r
+\r
+function processVMnetmacs() {\r
+ // For each VM type, for each network role, get the set of MACs \r
+ puts("Processing VM-net-macs");\r
+ var newVMnetmacs = [];\r
+ csvVMnetworkMACs.forEach( function(vm) {\r
+ var newvmnetmacsJson = {};\r
+ newvmnetmacsJson["vm-type"] = vm.field2;\r
+ newvmnetmacsJson["network-role"] = vm.field3;\r
+ newvmnetmacsJson["mac-address"] = vm.field4;\r
+ newVMnetmacs.push(newvmnetmacsJson);\r
+ }\r
+ );\r
+ rawJson["vm-net-macs"] = newVMnetmacs;\r
+ puts("rawJson for vm-net-macs");\r
+ putd(rawJson["vm-net-macs"]);\r
+}\r
+\r
+function processTagValues() {\r
+ var newTagValues = _.map(csvTagValues, function(x) { return {'vnf-parameter-name': x['field2'], \r
+ 'vnf-parameter-value': x['field3']}; } );\r
+ rawJson['tag-values'] = newTagValues;\r
+ puts("Tag-values read:");\r
+ putd(rawJson['tag-values']);\r
+ puts("\n");\r
+}\r
+\r
+\r