function getUVEKeys (req, res, appData) {
    var url = '/analytics/uve-types';
    var isProject = req.query['isProject'],
        globalUVEKeys = [],
        projectUVEKeys = [],
        uveKeys = [];
    opApiServer.apiGet(url, appData,
        function(err, data) {
            if (err || (null == data)) {
                commonUtils.handleJSONResponse(err, res, null);
            } else {
                for(var key in data) {
                    if (data[key] != null) {
                        var uveObj = data[key];
                        globalUVEKeys.push(key);
                        if (uveObj['global_system_object'] == false) {
                            projectUVEKeys.push(key);
                        }
                    }
                }
                uveKeys = (isProject === 'true') ? projectUVEKeys : globalUVEKeys;
                commonUtils.handleJSONResponse(null, res, uveKeys);
            }
    });
}
/*
 * @listAllServiceInstancesDetails
 * public function
 * URL /api/tenants/config/service-instances-details
 * Gets the details of service-instances across all the projects
 */
function listAllServiceInstancesDetails (req, res, appData)
{
    var siURL = '/service-instances';
    var siDataObjArr = [];

    configApiServer.apiGet(siURL, appData, function(err, data) {
        if ((null != err) || (null == data) || 
            (null == data['service-instances'])) {
            commonUtils.handleJSONResponse(err, res, []);
            return;
        }
        var siData = data['service-instances'];
        var siCnt = siData.length;
        for (var i = 0; i < siCnt; i++) {
            var siReqURL = '/service-instance/' + siData[i]['uuid'];
            commonUtils.createReqObj(siDataObjArr, siReqURL,
                                     global.HTTP_REQUEST_GET, null, null,
                                     null, appData);
        }
        if (!siDataObjArr.length) {
            commonUtils.handleJSONResponse(err, res, []);
            return;
        }
        async.map(siDataObjArr,
                  commonUtils.getAPIServerResponse(configApiServer.apiGet,
                                                   false),
                  function(err, results) {
            commonUtils.handleJSONResponse(err, res, results);
        });
    });
}
Example #3
0
function readLRSendDataUI (logicalRouterGetURL, appData, response)
{
    configApiServer.apiGet(logicalRouterGetURL, appData,
        function (error, data) {
            logicalRouterSendResponse(error, data, response);
    });
}
/**
 * @updateVMInterfaceProperties
 * private function
 */
function updateVMInterfaceProperties(response, appData, options) {
    var interfaceUrl = '/virtual-machine-interface/' + options.interfaceUUID,
        defaultPCAPAnalyzerFQN = options.defaultPCAPAnalyzerFQN,
        direction = options.direction, projectFQN = options.projectFQN;
    configApiServer.apiGet(interfaceUrl, appData, function (error, interfaceJSON) {
        var interfaceProperties;
        if (error) {
            commonUtils.handleJSONResponse(error, response, null);
        } else {
            interfaceProperties = interfaceJSON['virtual-machine-interface']['virtual_machine_interface_properties'];
            if (interfaceProperties == null) {
                interfaceJSON['virtual-machine-interface']['virtual_machine_interface_properties'] = {interface_mirror: getInterfaceMirrorProperty(defaultPCAPAnalyzerFQN, direction)};
            } else {
                interfaceProperties['interface_mirror'] = getInterfaceMirrorProperty(defaultPCAPAnalyzerFQN, direction);
            }
            configApiServer.apiPut(interfaceUrl, interfaceJSON, appData, function (error, jsonData) {
                var analyzerNotReadyMsg = 'Interface packet-capture analyzer is not ready. Please try again after few minutes.';
                if (error) {
                    logutils.logger.error(error.stack);
                    commonUtils.handleJSONResponse(error, response, null);
                } else if (options.action == 'start') {
                    getPCAPAnalyzerVMId(response, appData, options, analyzerNotReadyMsg, function (response, responseJSON) {
                        commonUtils.handleJSONResponse(null, response, responseJSON);
                    });
                } else {
                    commonUtils.handleJSONResponse(null, response, jsonData);
                }
            });
        }
    });
};
/**
 * @siFetchPolicyCb
 * private function
 * 1. Get policy id for given list of SIs of 'analyzer' type
 * 2. Required a list of dynamic policy name for given list of SIs of 'analyzer' type
 */
function siFetchPolicyCb(response, appData, filteredResults, dynamicPolicyNames) 
{
    var serviceInstances = {}, policyUrl = '/network-policys';
    if (filteredResults.length > 0) {
        policyUrl += '?parent_type=project&parent_fq_name_str=' + filteredResults[0]['ConfigData']['service-instance']['fq_name'][0] + ":" + filteredResults[0]['ConfigData']['service-instance']['fq_name'][1];
        configApiServer.apiGet(policyUrl, appData,
            function (error, data) {
                var policys, policyName, index, results = [];
                if (!error) {
                    policys = data['network-policys'];
                    for (var i = 0; i < policys.length; i++) {
                        policyName = policys[i]['fq_name'][2];
                        index = dynamicPolicyNames.indexOf(policyName);
                        if(index != -1) {
                            filteredResults[index]['ConfigData']['service-instance']['policyuuid'] = policys[i]['uuid'];
                            results[results.length] = filteredResults[index];
                        }
                    }
                }
                serviceInstances['service_instances'] = results;
                commonUtils.handleJSONResponse(error, response, serviceInstances);
            });
    } else {
        serviceInstances['service_instances'] = filteredResults;
        commonUtils.handleJSONResponse(null, response, serviceInstances);
    }
};
 function(error, vmData) {
     if(error) {
         if(error.responseCode === 409){
             var vmIdIndex = error.message.indexOf(':') + 1;
             var oldVmId = error.message.substr(vmIdIndex).trim();
             configApiServer.apiGet('/virtual-machine/' + oldVmId, appData,
                 function(err, oldVmData) {
                     if(err || oldVmData['virtual-machine'] == null
                         || (oldVmData['virtual-machine'] && oldVmData['virtual-machine']['virtual_machine_interface_back_refs'] == null)) {
                        commonUtils.handleJSONResponse(err, response, null);
                        return;
                     }
                     var oldVmiId = oldVmData['virtual-machine']['virtual_machine_interface_back_refs'][0]['uuid'];
                     ports.deletePortsCB({'appData' : appData, 'uuid' : oldVmiId, 'request' : request}, function(mapError, deleteData) {
                         configApiServer.apiPost('/virtual-machines', vmPostData, appData, function(newVmErr, newVmData) {
                             setVMRefToVMI(vmiId, name, appData, response);
                         });
                    });
                 });
         } else {
             commonUtils.handleJSONResponse(error, response, null);
             return;
         }
     } else {
         setVMRefToVMI(vmiId, name, appData, response);
     }
 }
 function(error, subnetDetails) {
      if(error || subnetDetails['subnet'] == null) {
          commonUtils.handleJSONResponse(error, response, null);
          return;
      }
      configApiServer.apiGet('/virtual-machine-interface/' + vmiId, appData,
          function(err, vmiData) {
               if(err || vmiData['virtual-machine-interface'] == null) {
                  commonUtils.handleJSONResponse(err, response, null);
                  return;
              }
              var subnet = subnetDetails['subnet'];
              subnet['virtual_machine_interface_refs'] = [{"to" : vmiData['virtual-machine-interface'].fq_name}];
              configApiServer.apiPut('/subnet/' + subnet.uuid, subnetDetails, appData,
                  function(er, updatedSubnetData) {
                      if(er) {
                         commonUtils.handleJSONResponse(er, response, null);
                         return;
                      }
                      commonUtils.handleJSONResponse(null, response, updatedSubnetData);
                  }
              );
          }
      );
 }
function getAllProjectAsync (dataObj, callback)
{
    var projURL, cookieDomain, projects, currentDomain;
    if(dataObj.type === identity) {
         authApi.getProjectList(dataObj.request, dataObj.appData,
                                function(error, identityData) {
             if(dataObj.parentId) {
                 cookieDomain = commonUtils.getValueByJsonPath(dataObj,
                         "request;cookies;domain", "", false);
                 projects = commonUtils.getValueByJsonPath(identityData,
                         "projects", [], false);
                 projects = _.filter(projects, function(project){
                     currentDomain = commonUtils.getValueByJsonPath(project,
                             "fq_name;0", [], false);
                     return cookieDomain === currentDomain ? true : false;
                 });
                 identityData = {"projects": projects};
             }
             callback(null, {error: error, data: identityData});
         });
     } else {
         projURL = "/projects";
         if(dataObj.parentId) {
             projURL += "?parent_id=" + dataObj.parentId;
         }
         configApiServer.apiGet(projURL, dataObj.appData,
                                function(error, configData) {
             callback(null, {error: error, data: configData});
         });
     }
};
function listPhysicalInterfaces (req, res, appData)
{
    var url = '/physical-interfaces';
    configApiServer.apiGet(url, appData, function(error, data) {
        commonUtils.handleJSONResponse(error, res, data);
    });
}
/**
 * @deleteVirtualDNS
 * public function
 * 1. URL /api/tenants/config/virtual-DNS/:id
 * 2. Deletes the virtual DNS from config api server
 */
function deleteVirtualDNS (request, response, appData) 
{
    var vdnsDelURL     = '/virtual-DNS/';
    var vdnsId         = null;
    var requestParams = url.parse(request.url, true);

    if (vdnsId = request.param('id').toString()) {
        vdnsDelURL += vdnsId;
    } else {
        error = new appErrors.RESTServerError('Virtual DNS ID is required.');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiGet(vdnsDelURL, appData, function(err, configData) {
        /* Now delete the ipam_refs */
        var vdnsPostData = commonUtils.cloneObj(configData);
        delete vdnsPostData['virtual-DNS']['network_ipam_back_refs'];
        updateVirtualDnsAssocIpamRead(err, configData, vdnsPostData, vdnsId,
                                      appData, function(err, data) {
            if (err) {
                deleteVirtualDNSCb(err, null, response, appData);
                return;
            }
            
            /* Now delete the virtual DNS */
            configApiServer.apiDelete(vdnsDelURL, appData,
                                      function(error, data) {
                deleteVirtualDNSCb(error, data, response, appData);
            });
        });
    });
}
/**
 * listVirtualDNSsFromAllDomains
 * private function
 * 1. Callback for listVirtualDNSs
 * 2. Reads the response of all Virtual DNS from all domains
 * list from config api server and sends it back to the client.
 */
function listVirtualDNSsFromAllDomains (request, response, appData) 
{
    //Get Virtuanl DNS Servers from all domains 
    //the user has access to.
    var vdnsURL = '/virtual-DNSs';
    configApiServer.apiGet(vdnsURL, appData,
        function(error, data) {
            if (error) {
               commonUtils.handleJSONResponse(error, response, null);
               return;
            }
            if(data && data.hasOwnProperty("virtual-DNSs") && 
                data["virtual-DNSs"].length > 0) {
                var vdns = data["virtual-DNSs"];
                var result = {};
                if(vdns.length > 0) {
                    result["virtual_DNSs"] = [];
                }
                for(var i=0; i<vdns.length; i++) {
                    result["virtual_DNSs"][i] = {};
                    result["virtual_DNSs"][i]["virtual-DNS"] = vdns[i];
                }
                commonUtils.handleJSONResponse(error, response, result);
            } else {
                var result = {
                    "virtual_DNSs" : []
                };
                commonUtils.handleJSONResponse(error, response, result);
            }
        }
    );
}
/**
 * @getPhysicalRouters
 * public function
 * 1. URL /api/tenants/config/physical-routers-details
 * 2. Gets list of physical-routers from config api server
 * 3. Calls getPhysicalRoutersCb that process data from config
 *    api server and sends back the http response.
 */
function getPhysicalRouters (request, response, appData)
{
     configApiServer.apiGet('/physical-routers', appData,
         function(error, data) {
             getPhysicalRoutersDetails(error, data, response, appData);
         });
}
function getControlNodeDetails (req, res, appData)
{
    var hostName = req.param('hostname');
    var url = '/analytics/uves/control-node/' + hostName + '?flat';
    var resultJSON = {};

    opApiServer.apiGet(url, appData,
                     commonUtils.doEnsureExecution(function(err, data) {
        if ((null != err) || (null == data)) {
            data = {};
            infraCmn.getDataFromConfigNode('bgp-routers', hostName, appData,
                                           data, function(err, resultJSON) {
                commonUtils.handleJSONResponse(err, res, resultJSON);
            });
        } else {
            var postData = {};
            postData['kfilt'] = [hostName + '*:contrail-control*'];
            infraCmn.addGeneratorInfoToUVE(postData, data, hostName,
                                  ['contrail-control'], appData,
                                  function(err, data) {
                infraCmn.getDataFromConfigNode('bgp-routers', hostName, appData,
                                               data, function(err, data) {
                    commonUtils.handleJSONResponse(err, res, data);
                });
            });
        }
    }, global.DEFAULT_CB_TIMEOUT));
}
/**
 * @readProjectQuotas
 * private function
 * 1. Needs project uuid in string format
 */
function readProjectQuotas (userData, callback)
{
    var projectIdStr = userData['id'];
    var appData = userData['appData'];
    var quotasGetURL = '/project/';
    if (projectIdStr.length) {
        quotasGetURL += projectIdStr;
    } else {
        error = new appErrors.RESTServerError('Add Project id');
        callback(error, null);
        return;
    }
    configApiServer.apiGet(quotasGetURL, appData,
                         function(error, data) {
                             if (error) {
                                 callback(error, null);
                                 return;
                             }
                             if(data["project"]["quota"] != undefined) {
                                 getProjectQuotasCb(error, data, appData, callback);
                             } else {
                                 getDefaultProjectQuotas(data, appData, callback);
                             }
                         }
    );
}
              function (err, instanceData) {
        var interfaceList =
            commonUtils.getValueByJsonPath(instanceData,
                                           "0;UveVirtualMachineAgent;interface_list",
                                           []);
        interfaceUrl = "/analytics/uves/virtual-machine-interface/*?kfilt=" +
            interfaceList.join(",") + "&cfilt=" + interfaceFilters.join(",");

        opApiServer.apiGet(interfaceUrl, appData, function (err, interfaceData) {
            var interfaceDetailsList = interfaceData['value'],
                networkList = [], interfaceMap = {}, network;

            for (var i = 0; i < interfaceDetailsList.length; i++) {
                network = interfaceDetailsList[i]['value']['UveVMInterfaceAgent']['virtual_network'];
                interfaceMap[network] = interfaceDetailsList[i];
                networkList.push(network);
            }

            instanceData[0]['UveVirtualMachineAgent']['interface_map'] = interfaceMap;
            networkUrl = '/analytics/uves/virtual-network/*?kfilt=' + networkList.join(',') + "&cfilt=" + networkFilters.join(",");

            opApiServer.apiGet(networkUrl, appData, function (err, networkData) {
                processInstanceConnectedGraph({instance: instanceData[0], networks: networkData['value']}, function (error, connectedGraphJSON) {
                    commonUtils.handleJSONResponse(null, res, connectedGraphJSON);
                });
            });
        });
    });
/**
 * @deletePolicy
 * public function
 * 1. URL /api/tenants/config/policy/:id
 * 2. Deletes the policy from config api server
 */
function deletePolicy(request, response, appData) 
{
    var polDelURL = '/network-policy/';
    var policyId = null;
    var requestParams = url.parse(request.url, true);

    if (policyId = request.param('id').toString()) {
        polDelURL += policyId;
    } else {
        error = new appErrors.RESTServerError('Provide Policy Id');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiGet(polDelURL, appData, function (err, configData) {
        if ('virtual_network_back_refs' in configData['network-policy']) {
            delete configData['network-policy']['virtual_network_back_refs'];
            updatePolicyWithVNs(configData, policyId, appData,
                function (err, data) {
                    configApiServer.apiDelete(polDelURL, appData,
                        function (error, data) {
                            deletePolicyCb(error, data, response)
                        });
                });
        } else {
            configApiServer.apiDelete(polDelURL, appData,
                function (error, data) {
                    deletePolicyCb(error, data, response)
                });
        }
    });
}
function getDBUsage (req, res, appData) {
    var url = '/analytics/uves/database-node/*';
    opApiServer.apiGet(url, appData, function (error, resultJSON) {
        if(!error) {
            var resultsArray = resultJSON['value'],
                responseJSON = [];

            for(var i = 0; resultsArray != null && i < resultsArray.length; i++) {
                var analyticsDBStats = {},
                    dbUsageInfo = resultsArray[i]['value']['DatabaseUsageInfo'],
                    key;

                analyticsDBStats['name'] = resultsArray[i]['name'];

                if(dbUsageInfo != null) {
                   for(key in dbUsageInfo) {
                       analyticsDBStats[key] = dbUsageInfo[key];
                   }
                }

                responseJSON.push(analyticsDBStats);
            }
            commonUtils.handleJSONResponse(null, res, responseJSON);
        } else {
            logutils.logger.error(error.stack);
            commonUtils.handleJSONResponse(error, res, null);
        }
    });
}
/**
 * @deletePolicyEntry
 * public function
 * 1. URL - Delete
 *  /api/tenants/config/policy/:id/network-policy-entries/ruleid
 * 2. Sets Post Data and sends back the policy to client
 */
function deletePolicyEntry(request, response, appData) 
{
    var policyId = null;
    var ruleId = null;
    var polGetURL = '/network-policy/';

    if (policyId = request.param('id').toString()) {
        polGetURL += policyId;
    } else {
        error = new appErrors.RESTServerError('Add Policy ID');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    if (!(ruleId = request.param('ruleid').toString())) {
        error = new appErrors.RESTServerError('Add Rule ID');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    configApiServer.apiGet(polGetURL, appData,
        function (error, data) {
            deletePolicyRule(error, data, ruleId,
                policyId, response, appData);
        });
}
function getControlNodesSummary (req, res, appData)
{
    var url = '/bgp-routers';
    var resultJSON = [];
    var configData = [], uveData = [];
    var addGen = req.param('addGen');

    configApiServer.apiGet(url, appData,
                           commonUtils.doEnsureExecution(function(err, data) {
        getControlNodeDetailConfigUVEData(data, addGen, appData,
                                          function(err, configUVEData,
                                          bgpRtrCnt) {
            if (null != err) {
                callback(null, []);
                return;
            }
            for (var i = 0; i < bgpRtrCnt; i++) {
                configData[i] = configUVEData[i];
            }
            var cnt = configUVEData.length;
            for (i = bgpRtrCnt; i < cnt; i++) {
                uveData[i - bgpRtrCnt] = configUVEData[i];
            }
            resultJSON =
                infraCmn.checkAndGetSummaryJSON(configData, uveData,
                    ['ControlNode']);
            commonUtils.handleJSONResponse(err, res, resultJSON);
        });
    }, global.DEFAULT_CB_TIMEOUT));
}
function getConfigUUIDList (req, res, appData)
{
    var type        = req.param('type');
    var parentUUID  = req.param('parentUUID');
    var resultJSON = [];
    type = type + 's';

    var configUrl = '/' + type + '?parent_id=' + parentUUID;
    configApiServer.apiGet(configUrl, appData, function(err, configData) {
        if ((null != err) || (null == configData) ||
            (null == configData[type])) {
            commonUtils.handleJSONResponse(err, res, null);
            return;
        }
        configData = configData[type];
        if ((null == configData) || (!configData.length)) {
            commonUtils.handleJSONResponse(null, res, resultJSON);
            return;
        }
        var count = configData.length;
        for (var i = 0; i < count; i++) {
            resultJSON.push(configData[i]['uuid']);
        }
        commonUtils.handleJSONResponse(null, res, resultJSON);
    });
}
                         function(error, data) {
     var gscURL = '/global-system-config/' + dataObj['uuid'];
     configApiServer.apiGet(gscURL, appData, function(err, gscData) {
         if ((null != err) || (null == gscData)) {
             callback(err, gscData);
             return;
         }
         var uiASN =
             dataObj['putData']['global-system-config']
                    ['autonomous_system'];
         var diffObj =
             jsonDiff.getConfigJSONDiff('global-system-config',
                                        gscData, dataObj['putData']);
         if (null == diffObj) {
             return;
         }
         configApiServer.apiPut(gscURL, diffObj, appData,
                                function(error, data) {
             if (null == uiASN) {
                 callback(error, data);
                 return;
             }
             setTimeout(function() {
                 callback(error, data);
                 return;
             }, 3000);
         });
     });
 });
function getFirstGlobalvRouterConfig(appData, callback) {
    var gvrListURL     = '/global-vrouter-configs';	
    configApiServer.apiGet(gvrListURL, appData,
        function(error, data) {
    		if (error) {
    			callback(error, null);
    			return;
    		}
    		var gvrUUID = null;
    		if(data["global-vrouter-configs"].length > 0) {
    			gvrUUID = data["global-vrouter-configs"][0].uuid; 
    		} else {
    			callback(error, null);
    			return;
    		}
		    var gvrGetURL = '/global-vrouter-config/' + gvrUUID;
	        configApiServer.apiGet(gvrGetURL, appData,
	        	function(error, data) {
	            	if (error) {
	        			callback(error, null);
	            	} else {
	        			callback(error, data);
	            	}
	        	});
        });
}
function deleteFirewallPoliciesAsync(dataObject, callback) {
    var appData =  dataObject.appData;
    var policyId = dataObject.uuid;
    var request = dataObject.request;
    configApiServer.apiGet('/firewall-policy/' + policyId, appData,
        function (errPolicy, policyDetails) {
            if(errPolicy) {
                callback(null, {'error': errPolicy, 'data': null});
                return;
            }
            var ruleDataObjArry = [], ruleIds = [],
                ruleRefs = commonUtils.getValueByJsonPath(policyDetails,
                        'firewall-policy;firewall_rule_refs', []);
            _.each(ruleRefs, function(rule) {
                var deleteRuleUrl = '/firewall-rule/' + rule.uuid;
                commonUtils.createReqObj(ruleDataObjArry, deleteRuleUrl,
                        global.HTTP_REQUEST_DEL, null, configApiServer, null, appData);
            });
            configApiServer.apiDelete('/firewall-policy/' + policyId, appData,
                function (error, data) {
                    if(error) {
                        callback(null, {'error': error, 'data': data});
                        return;
                    }
                    deleteAssociatedFirewallRules(ruleDataObjArry, appData,
                        function(rulesErr, rulesData) {
                            callback(null, {'error': rulesErr, 'data': rulesData});
                        }
                    );
                }
            );
        }
    );
}
function deletePolicyProcess(policyId, appData, request, callback){
    console.log("deletePolicyProcess");
    var polDelURL = '/network-policy/';
    polDelURL += policyId;
    configApiServer.apiGet(polDelURL, appData, function (err, configData) {
        console.log("configData"+JSON.stringify(configData))
        if ('virtual_network_back_refs' in configData['network-policy']) {
            console.log("a");
            delete configData['network-policy']['virtual_network_back_refs'];
            updatePolicyWithVNs(configData, policyId, appData,
                function (err, data) {
            console.log("b");
                    configApiServer.apiDelete(polDelURL, appData,
                        function (error, data) {
            console.log("c");
                            callback(error, data)
                        });
                });
        } else {
            console.log("else");
            configApiServer.apiDelete(polDelURL, appData,
                function (error, data) {
                    callback(error, data)
                });
        }
    });
}
function updateIpamDns (request, response, appData) 
{
    var ipamId         = null;
    var ipamGetURL     = '/network-ipam/';
    var ipamOptionsRef = [];
    var ipamOPtionsLen = 0, i = 0;
    var ipamPostData   = request.body;

    if (typeof(ipamPostData) != 'object') {
        error = new appErrors.RESTServerError('Invalid Post Data');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    if (ipamId = request.param('id').toString()) {
        ipamGetURL += ipamId;
    } else {
        error = new appErrors.RESTServerError('Add Ipam ID');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    configApiServer.apiGet(ipamGetURL, appData,
                        function(error, data) {
    						setIpamDnsOptions(error, data, ipamPostData,
                                       ipamId, response, appData);
                        });
}
/**
 * @getFloatingIpPoolsByVNLists
 * private function
 * 1. Gets list of floating ip pools  from  All VNs' fip
 *    pool  refs
 */
function getFloatingIpPoolsByVNLists (request, appData, callback)
{
    var vnListURL = '/virtual-networks';
    var fipPool = {};
    var dataObjArr = [];
    fipPool['floating_ip_pool_refs'] = [];
    var vnURL =
        '/virtual-networks?detail=true&fields=' +
        'floating_ip_pools,network_ipam_refs&filters=router_external==true';
    configApiServer.apiGet(vnURL, appData, function(err, vnList) {
        if ((null != err) || (null == vnList) || 
            (null == vnList['virtual-networks'])) {
            callback(err, fipPool);
            return;
        }
        var results = vnList['virtual-networks'];
        var resCnt = results.length;
        for (i = 0; i < resCnt; i++) {
            try {
                var vn = results[i]['virtual-network'];
                if (null != vn['floating_ip_pools']) {
                    var subnets = parseVNSubnets(results[i]);
                    var fipCnt = vn['floating_ip_pools'].length;
                    for(var j = 0; j < fipCnt ; j++) {
                        vn['floating_ip_pools'][j]['subnets'] =  subnets;
                        fipPool['floating_ip_pool_refs'].push(vn['floating_ip_pools'][j]);
                    }
                }
            } catch(e) {
                continue;
            }
        }
        callback(null, fipPool);
    });
}
function ifNetworkExists(appData,projUUID,name,callback,retryCnt) {
    if(retryCnt == null)
        retryCnt = 0;
    if(retryCnt == maxRetryCnt) {
        callback(false);
        return;
    }
    retryCnt++;
    var networkListURL = '/project/' + projUUID + '?exclude_back_refs=True';
    configApiServer.apiGet(networkListURL,appData,function(err,data) {
        var networkUUIDs = [],reqUrl = '';
        if(data['project'] != null && data['project']['virtual_networks'] != null) {
            data = data['project']['virtual_networks'];
            var nwURLsArr = [],nwNames = [];
            for(var i=0;i<data.length;i++) {
                var nwUUID = data[i]['uuid'];
                var nwName = data[i]['to'][2];
                if(nwName == name) {
                        callback(nwUUID);
                        return;
                    }
                }
            }
        setTimeout(function() {
            ifNetworkExists(appData,projUUID,name,callback,retryCnt);
        },500);
    });
}
/**
 * @updateVDNSRecordUpdate
 * public function
 * 1. URL /api/tenants/config/virtual-DNS/:id/virtual-DNS-record/:recordid
 * 2. Updates a virtual DNS record
 * 3. Reads back the updated virtual DNS config and send it
 *    back to the client
 */
function updateVDNSRecordUpdate(request, response, appData) {
    var dnsRecURL = '/virtual-DNS-record/';
    var vdnsRecPutData = request.body;
    var requestParams = url.parse(request.url, true), perms2;

    if (!(virtualDNSId = request.param('id').toString())) {
        error = new appErrors.RESTServerError('Virtual DNS Id ' +
            'is required');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    if (!(vdnsRecordId = request.param('recordid').toString())) {
        error = new appErrors.RESTServerError('DNS Record Id is required');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    try {
        var vdnsRecData =
            vdnsRecPutData['virtual-DNS']['virtual_DNS_records'][0][
                'virtual_DNS_record_data'
            ];
        perms2 =
            vdnsRecPutData['virtual-DNS']['virtual_DNS_records'][0][
                'perms2'
            ];
    } catch (e) {
        error = new appErrors.RESTServerError('DNS Record not found');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    dnsRecURL += vdnsRecordId;
    configApiServer.apiGet(dnsRecURL, appData, function(err, configData) {
        if ((null != err) || (null == configData)) {
            commonUtils.handleJSONResponse(err, response, null);
            return;
        }
        var oldConfigData = commonUtils.cloneObj(configData);
        configData['virtual-DNS-record']['virtual_DNS_record_data'] =
            vdnsRecData;
        configData['virtual-DNS-record']['perms2'] =
            perms2;
        var delta =
            jsonDiff.getConfigJSONDiff('virtual-DNS-record',
                oldConfigData,
                configData);
        configApiServer.apiPut(dnsRecURL, delta, appData,
            function(err, data) {
                if (err) {
                    commonUtils.handleJSONResponse(err, response,
                        null);
                } else {
                    commonUtils.handleJSONResponse(err, response,
                        data);
                }
            });
    });
}
// Handle request to get a JSON of virtual network for a given id.
function getVNetwork (req, res, appData) 
{
	var url, vn = req.param('vn');
	url = "/virtual-network/" + vn;
	configApiServer.apiGet(url, appData, function (error, vnJSON) {
		commonUtils.handleJSONResponse(error, res, vnJSON);
	});
}
function getAlarmsAsync(dataObj, callback)
{
    var url = dataObj.reqUrl;
    var appData = dataObj.appData;
    opApiServer.apiGet(url, appData, function(err, alarmDetLst){
        callback(err, alarmDetLst);
    });
}