/**
 * @createSecurityGroup
 * public function
 * 1. URL /api/tenants/config/securitygroup Post
 * 2. Sets Post Data and sends back the Security Group to client
 */
function createSecurityGroup(request, response, appData)
{
    var securityGroupCreateURL = '/security-groups';
    var securityGroupPostData = request.body;

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

    if ((!('security-group' in securityGroupPostData)) ||
        (!('fq_name' in securityGroupPostData['security-group'])) ||
        (!(securityGroupPostData['security-group']['fq_name'][2].length))) {
        error = new appErrors.RESTServerError('Enter Security Group Name ');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    configApiServer.apiPost(securityGroupCreateURL, securityGroupPostData, appData,
        function (error, data) {
            setSecurityGroupRead(error, data, response, appData);
        });
}
/**
 * @setPRouterRead
 * private function
 * 1. Callback for Fip create / update operations
 * 2. Reads the response of Fip get from config api server
 *    and sends it back to the client.
 */
function setPRouterRead(error, fipConfig, response, appData) 
{
    var fipGetURL = '/floating-ip/';

    if (error) {
       commonUtils.handleJSONResponse(error, response, null);
       return;
    }

    fipGetURL += fipConfig['floating-ip']['uuid'];
    configApiServer.apiGet(fipGetURL, appData,
                         function(error, data) {
                         fipSendResponse(error, data, response)
                         });
}
/**
 * @setPolicyRead
 * private function
 * 1. Callback for createPolicy
 * 2. Reads the response of policy get from config api server
 *    and sends it back to the client.
 */
function setPolicyRead(error, polConfig, response, appData) 
{
    var polGetURL = '/network-policy/';

    if (error) {
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    polGetURL += polConfig['network-policy']['uuid'];
    configApiServer.apiGet(polGetURL, appData,
        function (error, data) {
            policySendResponse(error, data, response)
        });
}
/**
 * @setVirtualDNSRead
 * private function
 * 1. Callback for Virtual DNS create / update operations
 * 2. Reads the response of Virtual DNS get from config api server
 *    and sends it back to the client.
 */
function setVirtualDNSRead(error, vdnsConfig, response, appData) {
    var vdnsGetURL = '/virtual-DNS/';

    if (error) {
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }

    vdnsGetURL += vdnsConfig['virtual-DNS']['uuid'];

    configApiServer.apiGet(vdnsGetURL, appData,
        function(error, data) {
            virtualDNSSendResponse(error, data, response);
        });
}
function processAndSendVRSummaryResponse (vRouterJSON, res)
{
    /* Now for all the vRouters IP, query sandesh to get the count 
       of interfaces and VN 
     */
    var vnUrlLists = [];
    var ipIndexMap = [];
    var itfUrlLists = [];
    var vmUrlLists = [];
    var j = 0;
    var ip = null;
    var ipList = [];
    var vRouterCount = vRouterJSON['virtual-routers'].length;
    for (var i = 0; i < vRouterCount; i++) {
        vRouter = vRouterJSON['virtual-routers'][i];
        vRouterJSON['virtual-routers'][i]['itf_count'] = 0;
        vRouterJSON['virtual-routers'][i]['vn_count'] = 0;
        ip = vRouter['ip_address'];
        if (global.RESP_DATA_NOT_AVAILABLE == ip) {
            /* Set ip as name */
            ip = vRouter['name'];
            /* Why IP is not set? */
        }

        vnUrlLists[j] = ip + '@' +
            infraCmn.getvRouetrIntrospectPortByReq(res.req) + '@' +
            '/Snh_VnListReq?name=';
        itfUrlLists[j] = ip + '@' +
            infraCmn.getvRouetrIntrospectPortByReq(res.req) + '@' +
            '/Snh_ItfReq?name=';
        vmUrlLists[j] = ip + '@' +
            infraCmn.getvRouetrIntrospectPortByReq(res.req) + '@' +
            '/Snh_VmListReq?uuid=';
        ipIndexMap[j] = i;
        ipList[i] = ip;
        j++;
        /* We do not have below info */
        vRouterJSON['virtual-routers'][i]['status'] = global.RESP_DATA_NOT_AVAILABLE;
        vRouterJSON['virtual-routers'][i]['trafficIn'] = global.RESP_DATA_NOT_AVAILABLE;
        vRouterJSON['virtual-routers'][i]['trafficOut'] = global.RESP_DATA_NOT_AVAILABLE;
    }
    if (!j) {
        commonUtils.handleJSONResponse(null, res, vRouterJSON['virtual-routers']);
        return;
    }
    getvRouterVnItfList(res, vnUrlLists, itfUrlLists, vmUrlLists, ipIndexMap,
                        vRouterJSON, ipList);
}
 vCenterApi.destroyIpPool(appData,poolId).done(function(data) {
     if(data['Fault'] != null) {
         commonUtils.handleJSONResponse({custom:true,responseCode:500,message:data['Fault']['faultstring']},response,null);
         return;
     } else {
         //Wait for network to be deleted from API server
         waitForNetworkDelete(appData,virtualNetworkId,function(result) {
             if(result == false) {
                 commonUtils.handleJSONResponse({custom:true,responseCode:500,message:'Error in deleting virtual network' + virtualNetworkId},response,null);
                 return
             } else {
                 commonUtils.handleJSONResponse(null,response,data);
             }
         });
     }
 });
 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);
 });
 function(err, vmiData) {
     if(err || vmiData['virtual-machine-interface'] == null) {
         commonUtils.handleJSONResponse(err, response, null);
         return;
     }
     vmiData['virtual-machine-interface']['virtual_machine_refs'] = [{"to" : [name]}];
     configApiServer.apiPut('/virtual-machine-interface/' + vmiId, vmiData, appData,
         function(er, updatedVMIData) {
             if(er) {
                commonUtils.handleJSONResponse(er, response, null);
                return;
             }
             commonUtils.handleJSONResponse(null, response, updatedVMIData);
         }
     );
 }
/**
 * @readVirtualDNS
 * private function
 * 1. Needs VDNS uuid in string format
 */
function readVirtualDNS (response, dnsIdStr, appData) 
{
    var vdnsGetURL         = '/virtual-DNS/';

    if (dnsIdStr.length) {
        vdnsGetURL += dnsIdStr;
    } else {
        error = new appErrors.RESTServerError('Add Virtual DNS id');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiGet(vdnsGetURL, appData,
                         function(error, data) {
    						getVirtualDNSCb(error, data, response, appData);
                         });
}
/**
 * Fetch and attach Virtual Routers details to the response
 * @param error
 * @param pRouters
 * @param response
 * @param appData
 */
function getVirtualRouterDetails(error, pRouters, response, appData){
    var vroutersLength = 0;
    var result = [];
    var dataObjArr        = [];
    for(var k = 0; k < pRouters.length; k++){
        var prouter = pRouters[k];
        if(prouter['physical-router'] != null && prouter['physical-router']['virtual_router_refs'] != null && prouter['physical-router']['virtual_router_refs'].length > 0){
            vroutersLength = prouter['physical-router']['virtual_router_refs'].length;
            for(i = 0; i < vroutersLength; i++) {
                var vrouter = prouter['physical-router']['virtual_router_refs'][i];
                reqUrl = '/virtual-router/' + vrouter['uuid'];
                commonUtils.createReqObj(dataObjArr, reqUrl, global.HTTP_REQUEST_GET,
                                        null, null, null, appData);
            }
        }
    }
    if(dataObjArr.length > 0) {
        async.map(dataObjArr,
            commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
            function(error, vrouters) {
                if (error) {
                   commonUtils.handleJSONResponse(error, response, null);
                   return;
                }
                if(vrouters.length > 0){

                    for(var j=0 ;j < pRouters.length; j++){
                        pRouters[j]['physical-router']['virtual-routers'] = [];
                        for(var l=0 ; l < vrouters.length; l++){
                            var prouterBackRefs = vrouters[l]['virtual-router']['physical_router_back_refs'];
                            if(prouterBackRefs != null && prouterBackRefs instanceof Array && prouterBackRefs.length > 0){
                                for(var k=0; k < prouterBackRefs.length; k++){
                                    if(pRouters[j]['physical-router']['uuid'] == prouterBackRefs[k]['uuid']){
                                        pRouters[j]['physical-router']['virtual-routers'].push(vrouters[l]['virtual-router']);
                                    }
                                }
                            }
                        }
                    }
                    commonUtils.handleJSONResponse(error, response, pRouters);
                }
            }
        );
    } else {
        commonUtils.handleJSONResponse(error, response, pRouters);
    }
}
function getServerResponseByModType (req, res, appData)
{
    var postData = req.body;
    var dataObjArr = [];

    dataObjArr = getBulkUVEPostURLs(postData, appData);
    if (null == dataObjArr) {
        var err = new appErrors.RESTServerError('postData is not correct');
        commonUtils.handleJSONResponse(err, res, null);
        return;
    }
    async.map(dataObjArr,
              commonUtils.getServerResponseByRestApi(opApiServer, false),
              function(err, resultJSON) {
        commonUtils.handleJSONResponse(err, res, resultJSON);
    });
}
 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(err, data) {
        if (err) {
            commonUtils.handleJSONResponse(err, response, null);
            return;
        }
        configApiServer.apiGet(vdnsURL, appData, function(err, configData) {
		    updateVirtualDnsAssocIpamRead(err, configData, vdnsPutData,
		      		                      vdnsId, appData, 
                                          function(err, data) {
                if (err) {
                    commonUtils.handleJSONResponse(err, response, null);
                    return;
                }
                readVirtualDNS(response, vdnsId, appData);
            });
        });
    });
/**
 * @createDnsSetIpam
 * private function
 * 1. Reads newly created IPAM object and calls updateVirtualDnsAssocIpamRead
 *    to update the DNS ref in IPAM objects.
 */
function createDnsSetIpam(error, vdnsConfig, vdnsPostData,
                          response, appData) 
{
    var dnsId = null; 
    if (error) {
       commonUtils.handleJSONResponse(error, response, null);
       return;
    }

    dnsId = vdnsConfig['virtual-DNS']['uuid'];
    
   
    updateVirtualDnsAssocIpamRead(error, vdnsConfig, vdnsPostData,
                                  dnsId, appData, function(err, data) {
        setVirtualDNSRead(err, vdnsConfig, response, appData);
    });
}
 function(error, results) {
     if (error) {
        commonUtils.handleJSONResponse(error, response, null);
        return;
     }
     delete postData['virtual-routers'];
     delete postData['virtual_router_type'];
     //create physical router
     configApiServer.apiPost('/physical-routers', postData, appData,
             function(error, data) {
                 if(error){
                     commonUtils.handleJSONResponse(error, response, null);
                     return;
                 }
                 getPhysicalRoutersWithIntfCount(request, response, appData);
             });
 }
 vCenterApi.createNetwork(userData,appData,function(err,data) {
     if(data['Fault'] != null) {
         commonUtils.handleJSONResponse({custom:true,responseCode:500,message:data['Fault']['faultstring']},res,null);
         return;
     }
     //Check if network synced on Api Server
     ifNetworkExists(appData,vnPostData['virtual-network']['parent_uuid'],userData['name'],function(vnUUID) {
         //If VN is not synced up with API Server
         if(vnUUID == false) {
             commonUtils.handleJSONResponse({custom:true,responseCode:500,message:'VN ' + userData['name'] + " doesn't exist on config server"},res,null);
             return;
         }
         appData['vnUUID'] =vnUUID;
         //Update network synced on Api Server 
         vnConfigApi.updateVirtualNetwork(req,res,appData);
     });
 });
	    	function(error, data) {
	            for(var i=0; null != data["virtual-networks"][i]; i++) {
				    var vn = data["virtual-networks"][i];
				    var vnGetURL = '/virtual-network/' + vn['uuid'].toString();
			        commonUtils.createReqObj(dataObjArr, vnGetURL,
                        global.HTTP_REQUEST_GET, null, null, null, appData);
                }
	            if(dataObjArr.length > 0) {
		    	    async.map(dataObjArr,
		        	    commonUtils.getAPIServerResponse(configApiServer.apiGet, false),
		        	    function(error, results) {
		        	        setIpamInVN(error, results, ipamConfig, ipamPostData, response, appData);
		        	    });
	            } else {
	            	commonUtils.handleJSONResponse(error, response, null);
	            }
	        });
 opApiServer.apiGet('/analytics/alarms', appData, function(err, alarmLst) {
     var alarmLstLen = alarmLst.length;
     var alarmObjArry = [];
     if(err || alarmLstLen == 0) {
         commonUtils.handleJSONResponse(err, res, null);
     }
     for(var i = 0; i < alarmLstLen; i++) {
         var name = alarmLst[i].name;
         var alarmSubStr = name.substr(0, name.length - 1);
         var alarmUrl = '/analytics/alarms/' + alarmSubStr + '/*';
         commonUtils.createReqObj(alarmObjArry, alarmUrl, global.HTTP_REQUEST_DELETE,
                                     null, opApiServer, null, appData);
     }
     async.mapLimit(alarmObjArry, global.ASYNC_MAP_LIMIT_COUNT, getAlarmsAsync, function(error, result) {
         commonUtils.handleJSONResponse(error, res, result);
     });
 });
function updateIpamInVDNS(error, ipamConfig, response, ipamId, vdnsRef, appData) 
{
	if (error) {
    	commonUtils.handleJSONResponse(error, response, null);
        return;
    }

	if (null !== vdnsRef && typeof vdnsRef !== "undefined") {
        var vdnsURL = '/virtual-DNS/' + vdnsRef['uuid'];
	    configApiServer.apiGet(vdnsURL, appData,
                function(error, data) {
	    			updateIpamInVDNSCb(error, data, ipamConfig, response, ipamId, appData);
                });
	} else {
        setIpamRead(error, ipamConfig, response, appData);		
	}
}
            function (error, data) {
                if (error != null || data == null) {
                    var error = new appErrors.RESTServerError(
                        'Invalid Project FQName');
                    commonUtils.handleJSONResponse(error, res, data);
                    return;
                }
                projectURL = '/project/' + data.uuid + 
                    '?fields=floating_ip_pool_refs&' +
                    'exclude_back_refs=true&exclude_children=true';

                configApiServer.apiGet(projectURL, appData,
                                     function(error, data) {
                                     getFipPoolsForProjectCb(error,
                                                 data, appData, callback);
                });
        });
/**
 * @deleteSecurityGroup
 * public function
 * 1. URL /api/tenants/config/securitygroup/:id
 * 2. Deletes the Security Group from config api server
 */
function deleteSecurityGroup(request, response, appData)
{
    var securityGroupDelURL = '/security-group/',
        securityGroupId, analyzerPolicyId;

    if (securityGroupId = request.param('uuid').toString()) {
        securityGroupDelURL += securityGroupId;
    } else {
        error = new appErrors.RESTServerError('Security Group ID is required.');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiDelete(securityGroupDelURL, appData,
        function (error, data) {
            deleteSecurityGroupCb(error, data, response);
        });
}
function createFirewallRules (request, response, appData)
{
    var fwPolicyId = commonUtils.getValueByJsonPath(request,
            'body;fwPolicyId', ''),
        rulesReqArray = commonUtils.getValueByJsonPath(request,
                'body;firewall-rules', []),
        dataObjArray = [], rulesSequenceMap = {};
        _.each(rulesReqArray, function(rule) {
            if('firewall-rule' in rule) {
                var ruleDetails = rule['firewall-rule'];
                rulesSequenceMap[ruleDetails.fq_name.join(":")] =
                    ruleDetails.sequence;
                commonUtils.createReqObj(dataObjArray, '/firewall-rules',
                        global.HTTP_REQUEST_POST,
                        commonUtils.cloneObj(rule), null, null, appData);
            }
        });
        if(dataObjArray.length === 0) {
            commonUtils.handleJSONResponse(null, response, null);
            return;
        }
        async.map(dataObjArray,
            commonUtils.getServerResponseByRestApi(configApiServer, false),
            function (error, fwRules) {
            if(error) {
                commonUtils.handleJSONResponse(error, response, null);
                return;
            }
            configApiServer.apiGet('/firewall-policy/' + fwPolicyId, appData,
                function(errorPolicy, policyDetails) {
                    if(errorPolicy) {
                        commonUtils.handleJSONResponse(error, response, null);
                        return;
                    }
                    var fwRuleRefs = commonUtils.getValueByJsonPath(policyDetails,
                            'firewall-policy;firewall_rule_refs', []);
                    var highestSeq = getHighestLeastSequence(fwRuleRefs);
                    updateFirewallRuleRefs(fwPolicyId, fwRules, appData, rulesSequenceMap, highestSeq,
                            function(fwError, fwRulesRes) {
                            commonUtils.handleJSONResponse(fwError, response, fwRulesRes);
                    });
                }
            );
        });
}
/**
 * @setIpamMgmt
 * private function
 * 1. Callback for updateIpam
 * 2. Updates the Ipam Mgmt Object, right now only dhcp options
 */
function setIpamOptions(error, ipamPostData, ipamId, response,
                        appData) 
{
    var ipamPostURL = '/network-ipam/' + ipamId;

    if (error) {
       commonUtils.handleJSONResponse(error, response, null);
       return;
    }

    /*
    if (!('network_ipam_mgmt' in ipamPostData['network-ipam'])) {
        ipamPostData['network-ipam']['network_ipam_mgmt'] = [];
    }

    ipamConfig['network-ipam']['network_ipam_mgmt'] = [];
    ipamConfig['network-ipam']['network_ipam_mgmt'] =
           ipamPostData['network-ipam']['network_ipam_mgmt'];
	ipamConfig["network-ipam"]["virtual_DNS_refs"] = [];
    if(typeof ipamPostData["network-ipam"]["network_ipam_mgmt"]["ipam_dns_server"] !== "undefined") {
    	if(typeof ipamPostData["network-ipam"]["network_ipam_mgmt"]
			["ipam_dns_server"]["virtual_dns_server_name"] !== "undefined") {
    		var vdnsName = ipamPostData["network-ipam"]["network_ipam_mgmt"]
    			["ipam_dns_server"]["virtual_dns_server_name"];
    		var dnsMethod = ipamPostData["network-ipam"]["network_ipam_mgmt"]["ipam_dns_method"];

    		if(dnsMethod != null && typeof dnsMethod !== "undefined" && dnsMethod === "virtual-dns-server" && 
    			vdnsName !== null && typeof vdnsName !== "undefined" && vdnsName.indexOf(":") != -1) {
        		var domainName = vdnsName.split(":")[0];
        		var vdnsName   = vdnsName.split(":")[1];
        		ipamConfig["network-ipam"]["virtual_DNS_refs"][0] = {
        			"to" : [
        			    domainName,
        			    vdnsName
        			]
        		};
    		}
    	}
    }
    */
    configApiServer.apiPut(ipamPostURL, ipamPostData, appData,
                         function(error, data) {
                             commonUtils.handleJSONResponse(error, response, data);
                         });
}
/**
 * @deleteServiceTemplate
 * public function
 * 1. URL /api/tenants/config/service-template/:id
 * 2. Deletes the service template from config api server
 */
function deleteServiceTemplate(request, response, appData) 
{
    var stDelURL = '/service-template/';
    var stId = null;
    var requestParams = url.parse(request.url, true);

    if (stId = request.param('id').toString()) {
        stDelURL += stId;
    } else {
        error = new appErrors.RESTServerError('Service Template ID is required.');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiDelete(stDelURL, appData,
        function (error, data) {
            deleteServiceTemplateCb(error, data, response)
        });
}
/**
 * @updatePolicyAssociatedNets
 * public function
 * 1. URL /api/tenants/config/policy/:id/associated-networks
 * 2. Gets policy object and figures the diff for association.
 * 3. Resets the policy references from / to virtual-networks.
 * 4. Reads updated policy config and sends it back to client
 */
function updatePolicyAssociatedNets(request, response, appData) 
{
    var policyId = null;
    var polPostData = request.body;

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

    updatePolicyWithVNs(polPostData, policyId, appData, function (err, data) {
        if (err) {
            commonUtils.handleJSONResponse(err, response, null);
            return;
        }
    });
}
                                   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);
 });
function processResultsCB(res, filteredResponseArray, postProcessor) {
    switch (postProcessor) {
        case constants.FUNC_COMPUTE_SERVER_STATES:
            computeServerStates(res, filteredResponseArray);
            break;

        case constants.FUNC_FILTER_IN_IMAGES:
            filterImagesPackages(res, filteredResponseArray, constants.IMAGE_TYPES);
            break;

        case constants.FUNC_FILTER_IN_PACKAGES:
            filterImagesPackages(res, filteredResponseArray, constants.PACKAGE_TYPES);
            break;

        default:
            commonUtils.handleJSONResponse(null, res, filteredResponseArray);
    }
};
 redisClient.get(urlDF, function(error, cachedJSONStr) {
     if (error || cachedJSONStr == null) {
         storageRest.apiGet(urlDF, appData, function (error, resultJSON) {
             if(!error && (resultJSON)) {
                 var resultJSON = parseStorageDFData(resultJSON);
                 if(!resultJSON) {
                     resultJSON = [];
                 }
                 redisClient.setex(urlDF, expireTime, JSON.stringify(resultJSON));
                 commonUtils.handleJSONResponse(null, res, resultJSON);
             } else {
                 commonUtils.handleJSONResponse(error, res, null);
             }
         });
     } else {
         commonUtils.handleJSONResponse(null, res, JSON.parse(cachedJSONStr));
     }
 });
/**
 * @deleteIpam
 * public function
 * 1. URL /api/tenants/config/ipam/:id
 * 2. Deletes the Ipam from config api server
 */
function deleteIpam (request, response, appData) 
{
    var ipamDelURL     = '/network-ipam/';
    var ipamId         = null;
    var requestParams = url.parse(request.url, true);

    if (ipamId = request.param('id').toString()) {
        ipamDelURL += ipamId;
    } else {
        error = new appErrors.RESTServerError('Provide IPAM Id');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiDelete(ipamDelURL, appData,
                            function(error, data) {
                            deleteIpamCb(error, data, response)
                            });
}
/**
 * @deleteFloatingIp
 * public function
 * 1. URL /api/tenants/config/floating-ip/:id
 * 2. Deletes the floating-ip from config api server
 */
function deleteFloatingIp (request, response, appData) 
{
    var fipDelURL     = '/floating-ip/';
    var fipId         = null;
    var requestParams = url.parse(request.url, true);

    if (fipId = request.param('id').toString()) {
        fipDelURL += fipId;
    } else {
        error = new appErrors.RESTServerError('Provide Floating IP Id');
        commonUtils.handleJSONResponse(error, response, null);
        return;
    }
    configApiServer.apiDelete(fipDelURL, appData,
                            function(error, data) {
                            deleteFloatingIpCb(error, data, response)
                            });
}