summaryrefslogtreecommitdiffstats
path: root/kubernetes/aai/components/aai-sparky-be/values.yaml
blob: 10448b7520bb456a7e9d27593c8d010bf8781db4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Copyright (c) 2018 Amdocs, Bell Canada, AT&T
# Modifications Copyright (c) 2020 Nokia
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Default values for sparky-be.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
global: # global defaults
  nodePortPrefix: 302
  aai:
    serviceName: aai
  aaiElasticsearch:
    serviceName: aai-elasticsearch
  gizmo:
    serviceName: aai-gizmo
  searchData:
    serviceName: aai-search-data
  readinessImage: onap/oom/readiness:3.0.1

# application image
repository: nexus3.onap.org:10001
image: onap/sparky-be:1.6.2
pullPolicy: Always
restartPolicy: Always
flavor: small
flavorOverride: small
dockerhubRepository: registry.hub.docker.com
ubuntuInitImage: oomk8s/ubuntu-init:2.0.0
# application configuration
config:
  elasticsearchHttpPort: 9200
  gerritBranch: 3.0.0-ONAP
  gerritProject: http://gerrit.onap.org/r/aai/test-config
  portalUsername: aaiui
  portalPassword: OBF:1t2v1vfv1unz1vgz1t3b
  portalCookieName: UserId
  portalAppRoles: ui_view
  aafUsername: aai@aai.onap.org
  aafNamespace: org.onap.aai
  aafPassword: enc:xxYw1FqXU5UpianbPeH5Rezg0YfjzuwQrSiLcCmJGfz
  cadiKeyFile: /opt/app/sparky/config/portal/keyFile
  cadiTrustStore: /opt/app/sparky/config/auth/truststoreONAPall.jks
  cadiFileLocation: /opt/app/sparky/config/portal/cadi.properties
  cadiTrustStorePassword: changeit
  cookieDecryptorClass: org.onap.aai.sparky.security.BaseCookieDecryptor

# ONAP Cookie Processing - During initial development, the following flag, if true, will
# prevent the portal interface's login processing from searching for a user
# specific cookie, and will instead allow passage if a valid session cookie is discovered.
  portalOnapEnabled: true
#

# override chart name (sparky-be) to share a common namespace
# suffix with parent chart (aai)
nsSuffix: aai


# default number of instances
replicaCount: 1

nodeSelector: {}

affinity: {}

# probe configuration parameters
liveness:
  initialDelaySeconds: 10
  periodSeconds: 10
  # necessary to disable liveness probe when setting breakpoints
  # in debugger so K8s doesn't restart unresponsive container
  enabled: true

readiness:
  initialDelaySeconds: 10
  periodSeconds: 10

service:
  type: NodePort
  portName: aai-sparky-be
  internalPort: 8000
  nodePort: 20

ingress:
  enabled: false
  service:
    - baseaddr: "aaisparkybe"
      name: "aai-sparky-be"
      port: 8000
  config:
    ssl: "redirect"

# Configure resource requests and limits
# ref: http://kubernetes.io/docs/user-guide/compute-resources/
resources:
  small:
    limits:
      cpu: 2
      memory: 4Gi
    requests:
      cpu: 0.25
      memory: 1Gi
  large:
    limits:
      cpu: 4
      memory: 8Gi
    requests:
      cpu: 0.5
      memory: 2Gi
  unlimited: {}
/* Literal.String.Backtick */ .highlight .sc { color: #e6db74 } /* Literal.String.Char */ .highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ .highlight .sd { color: #e6db74 } /* Literal.String.Doc */ .highlight .s2 { color: #e6db74 } /* Literal.String.Double */ .highlight .se { color: #ae81ff } /* Literal.String.Escape */ .highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ .highlight .si { color: #e6db74 } /* Literal.String.Interpol */ .highlight .sx { color: #e6db74 } /* Literal.String.Other */ .highlight .sr { color: #e6db74 } /* Literal.String.Regex */ .highlight .s1 { color: #e6db74 } /* Literal.String.Single */ .highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ .highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #a6e22e } /* Name.Function.Magic */ .highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
// Helper functions for processing a VNF worksheet

var helpers = require('./helpers.js');
var _ = require('lodash');
var csvtojson = require('csvtojson');
var async = require('async');
var uuid = require('node-uuid');   // generate a uuid with "uuid.v1()"
var path = require('path');
var fs = require("fs");
var moment = require("moment");

var vnf = module.exports;
var getParam = helpers.getParam;

var callback;
var indir;
var csvGeneral, csvZones, csvNetworks, csvVMs, csvVMnetworks, csvVMnetworkIPs, csvVMnetworkMACs, csvTagValues;
var rawJson={}
var finalJson={};  
var platform;
var req, res;
var preloadVersion;  // 1607, 1610, etc...
var proc_error=false;
var filename;

puts = helpers.puts;
putd = helpers.putd;

vnf.go = function(lreq,lres,cb,dir){
  puts("Processing VNF workbook");
	proc_error=false;
  req = lreq;
  res = lres;
  callback = cb;
  if (dir!="") {
    platform="pc";
    indir=dir;
  } else {
    platform="portal";
    indir=process.cwd() + "/uploads/";
  }
  doGeneral();
}


// READ WORKSHEET: GENERAL

function doGeneral() {
  puts("Reading General worksheet");
  var csvFilename="General.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotGeneral);
  }
  else {
    puts('General.csv file is missing from upload.');
		proc_error=true;
  }
}

function gotGeneral(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('General.csv file is missing from upload.');
    return;
  }
  csvGeneral = jsonObj;
  puts("\nRead this: ");
  putd(csvGeneral);
  puts("\n");
  doAvailZones();
}

// READ WORKSHEET: AVAILABILITY ZONES

function doAvailZones() {
  puts("Reading Availability-zones worksheet");
  var csvFilename="Availability-zones.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotAvailZones);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotAvailZones(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('Availability-zones.csv file is missing from upload.');
    return;
  }
  csvZones = jsonObj;
  csvZones = _.reject(csvZones, 'field2', 'Availability Zones');
  csvZones = _.reject(csvZones, 'field2', 'List the availability zones for this VNF');
  csvZones = _.reject(csvZones, 'field2', '');
  puts("\nRead this: ");
  putd(csvZones);
  puts("\n");
  doNetworks();
}

// READ WORKSHEET: NETWORKS

function doNetworks() {
  puts("Reading Networks worksheet");
  var csvFilename="Networks.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotNetworks);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotNetworks(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('Networks.csv file is missing from upload.');
    return;
  }
  csvNetworks = jsonObj;
  csvNetworks = _.reject(csvNetworks, 'field2', 'Networks');
  csvNetworks = _.reject(csvNetworks, 'field2', 'List the VNF networks. (VM-networks are on a different worksheet.)');
  csvNetworks = _.reject(csvNetworks, 'field2', 'network-role');
  csvNetworks = _.reject(csvNetworks, 'field2', '');
  puts("\nRead this: ");
  putd(csvNetworks);
  puts("\n");
  doVMs();
}

// READ WORKSHEET: VMs

function doVMs() {
  puts("Reading VMs worksheet");
  var csvFilename="VMs.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotVMs);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotVMs(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('VMs.csv file is missing from upload.');
    return;
  }
  csvVMs = jsonObj;
  csvVMs = _.reject(csvVMs, 'field2', 'VMs');
  csvVMs = _.reject(csvVMs, 'field2', 'List the VM types for this VNF');
  csvVMs = _.reject(csvVMs, 'field2', 'vm-type');
  csvVMs = _.reject(csvVMs, 'field2', '');
  puts("\nRead this: ");
  putd(csvVMs);
  puts("\n");
  doVMnetworks();
}

// READ WORKSHEET: VM-NETWORKS

function doVMnetworks() {
  puts("Reading VM-networks worksheet");
  var csvFilename="VM-networks.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotVMnetworks);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotVMnetworks(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('VM-networks.csv file is missing from upload.');
    return;
  }
  csvVMnetworks = jsonObj;
  csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'VM-networks');
  csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'List the VM-networks for each VM type');
  csvVMnetworks = _.reject(csvVMnetworks, 'field2', 'vm-type');
  csvVMnetworks = _.reject(csvVMnetworks, 'field2', '');
  puts("\nRead this: ");
  putd(csvVMnetworks);
  puts("\n");
  doVMnetworkIPs();
}

// READ WORKSHEET: VM-NETWORK-IPS

function doVMnetworkIPs() {
  puts("Reading VM-network-IPs worksheet");
  var csvFilename="VM-network-IPs.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotVMnetworkIPs);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotVMnetworkIPs(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('VM-network-IPs.csv file is missing from upload.');
    return;
  }
  csvVMnetworkIPs = jsonObj;
  csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'VM-network-IPs');
  csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'List the IPs assigned to each VM-network');
  csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', 'vm-type');
  csvVMnetworkIPs = _.reject(csvVMnetworkIPs, 'field2', '');
  puts("\nRead this: ");
  putd(csvVMnetworkIPs);
  puts("\n");
  doVMnetworkMACs();
}

// READ WORKSHEET: VM-NETWORK-MACS

function doVMnetworkMACs() {
  puts("Reading VM-network-MACs worksheet");
  var csvFilename="VM-network-MACs.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotVMnetworkMACs);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotVMnetworkMACs(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('VM-network-MACs.csv file is missing from upload.');
    return;
  }
  csvVMnetworkMACs = jsonObj;
  csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'VM-network-MACs');
  csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'List the MACs assigned to each VM-network');
  csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', 'vm-type');
  csvVMnetworkMACs = _.reject(csvVMnetworkMACs, 'field2', '');
  puts("\nRead this: ");
  putd(csvVMnetworkMACs);
  puts("\n");
  doTagValues();
}

// READ WORKSHEET: TAG-VALUES

function doTagValues() {
  puts("Reading Tag-values worksheet");
  var csvFilename="Tag-values.csv";
  var newFileName = helpers.getFileName(req, csvFilename);
  if ( newFileName != null ) {
    helpers.readCsv(indir, newFileName, gotTagValues);
  }
  else {
		proc_error=true;
    callback(csvFilename + ' file is missing from upload.');
  }
	return;
}

function gotTagValues(err, jsonObj) {
  if (err) {
    puts("\nError!");
    putd(err);
		proc_error=true;
    callback('Tag-values.csv file is missing from upload.');
    return;
  }
  csvTagValues = jsonObj;
  csvTagValues = _.reject(csvTagValues, 'field2', 'Tag-values');
  csvTagValues = _.reject(csvTagValues, 'field2', 'Extra data to be passed into the HEAT template for this VNF');
  csvTagValues = _.reject(csvTagValues, 'field2', 'vnf-parameter-name');
  csvTagValues = _.reject(csvTagValues, 'field2', 'vnf-parameter-value');
  csvTagValues = _.reject(csvTagValues, 'field2', '');
  puts("\nRead this: ");
  putd(csvTagValues);
  puts("\n");
  doneReadingFiles();
}




function doneReadingFiles() {
  puts("\n");
  puts("DONE READING FILES!");
  puts("\n");
  processJson();
}


// PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT
function processJson() {
  processGeneral();
  processAvailZones();
  processNetworks();
  processVMnetworks();
  processVMnetips();
  processVMnetmacs();
  processVMs();
  processTagValues();
  assembleJson();
  outputJson();

	puts('proc_error=');
  putd(proc_error);
  if ( proc_error ){
    puts('callback with failure');
    callback('Error was encountered processing upload.');
    return;
  }
  else
  {
    puts('callback with success');
    callback(null,  finalJson, filename);
    return;
  }
}

// ASSEMBLE AND OUTPUT RESULTS

function assembleJson() {
  puts("\n");
  puts("Using raw JSON and assembling final ouptut JSON.");
  puts("\n");

  vnfTopoID = { "service-type": "SDN-MOBILITY",
	        "vnf-name": rawJson['vf-module-name'],
		"vnf-type": rawJson['vf-module-model-name'], 
		"generic-vnf-name": rawJson['generic-vnf-name'], 
		"generic-vnf-type": rawJson['generic-vnf-type'] };

  vnfZones = rawJson['availability-zones'];

  vnfNetworks = rawJson['networks'];

  vnfVMs = rawJson['vms'];

  vnfParams = rawJson['tag-values'];

  vnfAssignments = { "availability-zones": vnfZones,
	             "vnf-networks": vnfNetworks,
		     "vnf-vms": vnfVMs};

  vnfTopo = { "vnf-topology-identifier": vnfTopoID,
              "vnf-assignments": vnfAssignments,
              "vnf-parameters": vnfParams };

  vnfInput = {'vnf-topology-information': vnfTopo}; 

  finalJson = {"input": vnfInput};

  //outputJson();
}

function outputJson() {
  puts("\n");
  puts("\n");
  puts(JSON.stringify(finalJson,null,2));
  puts("\n");
  puts("\n");
  var unixTime, fullpath_filename;
  unixTime = moment().unix();
  if (platform=='portal') {
    fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".vnf_worksheet.json";
    filename = unixTime + ".vnf_worksheet.json.";
  } else {
    fullpath_filename = "./output.json."+unixTime;
    filename = "output.json." + unixTime;
  }
  //helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);
  //callback(null,  finalJson, filename);
}


// Gather functions that actually process data after it is all read

function processGeneral() {

  preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');
  rawJson['preload-version'] = preloadVersion;
  puts("Preload version: " + preloadVersion);

  if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {
    puts("\nError - incorrect version of preload worksheet.");
    callback('Error - incorrect version of preload worksheet.');
  }

  rawJson['vf-module-name'] = getParam(csvGeneral, 'field2', 'vf-module-name', 'field3');
  // rawJson['vf-module-type'] = getParam(csvGeneral, 'field2', 'vf-module-type', 'field3');
  try {
    rawJson['vf-module-model-name'] = getParam(csvGeneral, 'field2', 'vf-module-model-name', 'field3');
  } catch (e) {
    puts("\n\n");
    puts("ERROR ERROR ERROR ERROR ERROR\n");
    puts("Failed to find data field 'vf-module-model-name'. Maybe this preload worksheet is older?")
    puts("If on the 'general' tab there is a field called 'vf-module-type' please rename it to 'vf-module-model-name'");
    puts("\n\n");
    process.exit();
  }
  rawJson['generic-vnf-name'] = getParam(csvGeneral, 'field2', 'vnf-name', 'field3');
  rawJson['generic-vnf-type'] = getParam(csvGeneral, 'field2', 'vnf-type', 'field3');
  rawJson['request-id'] = uuid.v1();
  rawJson['source'] = "ADMINPORTAL";
  rawJson['request-action'] = "PreloadVNFRequest";
  rawJson['svc-request-id'] = uuid.v1();
  rawJson['svc-action'] = "reserve";
  puts('rawJson:');
  putd(rawJson);
  puts("\n");
}

function processAvailZones() {
  var newZones = _.map(csvZones, function(x) { return {'availability-zone': x['field2']}; } );
  rawJson['availability-zones'] = newZones;
  puts("Availability zones read:");
  putd(rawJson['availability-zones']);
  puts("\n");
}

function processNetworks() {
  var newNetworks = [];
  csvNetworks.forEach( function(network) {
    var netJson = {};
    netJson["network-role"] = network.field2;
    netJson["network-name"] = network.field3;
    netJson["network-id"] = network.field4;
    netJson["contrail-network-fqdn"] = network.field5;
    netJson["subnet-name"] = network.field6;
    netJson["subnet-id"] = network.field7;
    netJson["ipv6-subnet-name"] = network.field8;
    netJson["ipv6-subnet-id"] = network.field9;
    newNetworks.push(netJson);
    }
  );
  puts("networks:");
  putd(newNetworks);
  rawJson["networks"] = newNetworks;
}

function processVMs() {
  var newVMs = [];
  csvVMs.forEach( function(vm) {
    var vmJson = {};
    vmJson["vm-type"] = vm.field2;
    vmJson["vm-name"] = vm.field3;
    newVMs.push(vmJson);
    }
  );

  puts("VMs:");
  putd(newVMs);

  // OK, now for each type, get count and then build vm-names array of the names
  var vnfvms=[]
  vmTypes = _.uniq(_.pluck(newVMs,'vm-type'));
  vmTypes.forEach( function(vmType) {
    puts(vmType);
    var vmJson={};
    var vmThisType;
    var vmCount;
    var vmNames=[];
    var tmpNames;
    vmThisType=_.select(newVMs, 'vm-type', vmType);
    vmCount=vmThisType.length;
    vmJson["vm-type"] = vmType;
    vmJson["vm-count"] = vmCount;
    tmpNames = _.pluck(vmThisType,'vm-name');
    vmJson["vm-names"] = _.map(tmpNames, function(nam) { return {"vm-name": nam}; } );
    netroles = _.select( rawJson["vm-networks"], "vm-type", vmType );
    newnetroles=[]
    netroles.forEach( function(netrole) {
      tmpNetDetails = {};
      tmpNetDetails["network-role"] = netrole["network-role"];
      tmpNetDetails["use-dhcp"] = netrole["use-dhcp"];

      var tmpipsThisVmType=[];
      tmpipsThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);
      var tmpips=[];
      tmpips = _.select( tmpipsThisVmType, "network-role", netrole["network-role"]);
      tmpipsJson = _.map(tmpips, function(ip) { return {"ip-address": ip["ip-address"]} } );
      tmpipsJson = _.reject(tmpipsJson, function(o) { return (o["ip-address"]==undefined); } );
      tmpNetDetails["network-ips"] = tmpipsJson;

      var tmpipsv6ThisVmType=[];
      tmpipsv6ThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);
      var tmpipsv6=[];
      tmpipsv6 = _.select( tmpipsv6ThisVmType, "network-role", netrole["network-role"]);
      tmpipsv6Json = _.map(tmpipsv6, function(ip) { return {"ip-address-ipv6": ip["ipv6-address"]} } );
      tmpipsv6Json = _.reject(tmpipsv6Json, function(o) { return (o["ip-address-ipv6"]==undefined); } );
      tmpNetDetails["network-ips-v6"] = tmpipsv6Json;

      var tmpirpThisVmType=[];
      tmpirpThisVmType = _.select( rawJson["vm-net-ips"], "vm-type", vmType);
      var tmpirp=[];
      tmpirp = _.select( tmpirpThisVmType, "network-role", netrole["network-role"]);
      tmpirpJson = _.map(tmpirp, function(irp) { return {"interface-route-prefix-cidr": irp["interface-route-prefix"]} } );
      tmpirpJson = _.reject(tmpirpJson, function(o) { return (o["interface-route-prefix-cidr"]==undefined); } );
      tmpNetDetails["interface-route-prefixes"] = tmpirpJson;

      var tmpmacsThisVmType=[];
      tmpmacsThisVmType = _.select( rawJson["vm-net-macs"], "vm-type", vmType);
      var tmpmacs=[];
      tmpmacs = _.select( tmpmacsThisVmType, "network-role", netrole["network-role"]);
      tmpmacsJson = _.map(tmpmacs, function(mac) { return {"mac-address": mac["mac-address"]} } );
      tmpNetDetails["network-macs"] = tmpmacsJson;

      var fip='';
      fip = netrole["floating-ip"];
      fip = _.trim(fip);
      if (fip != '') {
        tmpNetDetails["floating-ip"] = netrole["floating-ip"];
      }

      var fipv6='';
      fipv6 = netrole["floating-ip-v6"];
      fipv6 = _.trim(fipv6);
      if (fipv6 != '') {
        tmpNetDetails["floating-ip-v6"] = netrole["floating-ip-v6"];
      }

      newnetroles.push(tmpNetDetails);
      }
    );
    vmJson["vm-networks"] = newnetroles;
    putd(vmJson);
    vnfvms.push(vmJson);
    }
  );
  rawJson["vms"] = vnfvms;
}

function processVMnetworks() {
  // For each VM type, for each Network role, get details like use-dhcp
  var newVMnetworks = [];
  csvVMnetworks.forEach( function(vm) {
    var newvmJson = {};
    newvmJson["vm-type"] = vm.field2;
    newvmJson["network-role"] = vm.field3;
    newvmJson["use-dhcp"] = vm.field4;
    newvmJson["floating-ip"] = vm.field5;
    newvmJson["floating-ip-v6"] = vm.field6;
    newVMnetworks.push(newvmJson);
    }
  );
  rawJson["vm-networks"] = newVMnetworks;
  puts("rawJson for vm-networks...");
  putd( rawJson["vm-networks"] );
}


function processVMnetips() {
  // For each VM type, for each network role, get the set of network IPs
  puts("Processing VM-net-ips");
  var newVMnetips = [];
  csvVMnetworkIPs.forEach( function(vm) {
    var newvmnetipsJson = {};
    newvmnetipsJson["vm-type"] = vm.field2;
    newvmnetipsJson["network-role"] = vm.field3;
    if (_.trim(vm.field4)!="") { 
      newvmnetipsJson["ip-address"] = vm.field4;
    }
    if (_.trim(vm.field5)!="") { 
    newvmnetipsJson["ipv6-address"] = vm.field5;
    }
    if (_.trim(vm.field6)!="") { 
    newvmnetipsJson["interface-route-prefix"] = vm.field6;
    }
    newVMnetips.push(newvmnetipsJson);
    }
  );
  rawJson["vm-net-ips"] = newVMnetips;
  puts("rawJson for vm-net-ips");
  putd(rawJson["vm-net-ips"]);
}

function processVMnetmacs() {
  // For each VM type, for each network role, get the set of MACs 
  puts("Processing VM-net-macs");
  var newVMnetmacs = [];
  csvVMnetworkMACs.forEach( function(vm) {
    var newvmnetmacsJson = {};
    newvmnetmacsJson["vm-type"] = vm.field2;
    newvmnetmacsJson["network-role"] = vm.field3;
    newvmnetmacsJson["mac-address"] = vm.field4;
    newVMnetmacs.push(newvmnetmacsJson);
    }
  );
  rawJson["vm-net-macs"] = newVMnetmacs;
  puts("rawJson for vm-net-macs");
  putd(rawJson["vm-net-macs"]);
}

function processTagValues() {
  var newTagValues = _.map(csvTagValues, function(x) { return {'vnf-parameter-name': x['field2'], 
	  'vnf-parameter-value': x['field3']}; } );
  rawJson['tag-values'] = newTagValues;
  puts("Tag-values read:");
  putd(rawJson['tag-values']);
  puts("\n");
}