package com.meesho.utilities def run(String memory_request, String cpu_request, String priority_v2) { echo 'Code to select node pool based on environment' switch (env.cicd_environment) { case 'prd': echo 'Code to select node pool based on memory and cpu request in prd' def mem_req_part = memory_request def cpu_req_part = cpu_request def priority = priority_v2 echo "mem_req_part is ${mem_req_part}" echo "cpu_req_part is ${cpu_req_part}" if ( mem_req_part.contains('M') ) { mem_req = mem_req_part.replaceAll('Mi', '') mem_req = mem_req.replaceAll('M', '') try { mem_req = mem_req.toDouble() } catch (NumberFormatException e) { mem_req = mem_req.toDouble() //mem_req = mem_req.toInteger() } } else if ( mem_req_part.contains('G') ) { mem_req = mem_req_part.replaceAll('Gi', '') mem_req = mem_req.replaceAll('G', '') try { mem_req = mem_req.toDouble() * 1024 } catch (NumberFormatException e) { mem_req = mem_req.toDouble() * 1024 //mem_req = mem_req.toInteger() } } echo "memory_request is ${memory_request} ${mem_req}" if ( cpu_req_part.contains('m') ) { cpu_req = cpu_req_part.replaceAll('m', '') try { cpu_req = cpu_req.toDouble() } catch (NumberFormatException e) { cpu_req = cpu_req.toDouble() //cpu_req = cpu_req.toInteger() } } else { try { cpu_req = cpu_req_part.toDouble() * 1000 } catch (NumberFormatException e) { cpu_req = cpu_req_part.toDouble() * 1000 //cpu_req = cpu_req.toInteger() } } echo "cpu_request is ${cpu_request} ${cpu_req}" def ratio = (mem_req / cpu_req).toDouble() if ( cpu_req > mem_req ) { ratio = 2 } //ratio = ratio.toInteger() echo "Ratio - ${ratio}" if(priority.equalsIgnoreCase('cp1')||priority.equalsIgnoreCase('cp2')||priority.equalsIgnoreCase('cp3')||priority.equalsIgnoreCase('up1')||priority.equalsIgnoreCase('up2')||priority.equalsIgnoreCase('up3')||priority.equalsIgnoreCase('sp1')||priority.equalsIgnoreCase('sp2')||priority.equalsIgnoreCase('sp3')){ low_priority="lite" if ( ratio >= 2.5 ) { ratiovalue = "tetra" } else { ratiovalue = "duo" } if ( cpu_req >=2200 ) { nodename = "sumo" } else{ nodename= "mega" } nodeSelectorvalue = "${nodename}${ratiovalue}${low_priority}" println nodeSelectorvalue break } else{ if ( ratio > 5.5 ) { ratiovalue = 'octa' } else if ( ratio >= 2.5 ) { ratiovalue = 'tetra' } else { ratiovalue = 'duo' } if ( cpu_req >= 2200) { nodevalue = 'sumo' } else if ( cpu_req < 2200 && cpu_req >= 1000) { nodevalue = 'mega' } else { nodevalue = 'compact' } switch ( env.BU?.toLowerCase() ) { case 'supply': if (nodevalue == 'sumo' && (ratiovalue == 'hexa' || ratiovalue == 'octa')){ ratiovalue = 'tetra' } else if (nodevalue == 'mega' && (ratiovalue == 'quad' || ratiovalue == 'octa')){ ratiovalue = 'tetra' } else if (nodevalue == 'compact' && ratiovalue == 'trio'){ ratiovalue = 'tetra' } break case 'demand': if (nodevalue == 'mega' && ratiovalue == 'quad'){ ratiovalue = 'tetra' } else if (nodevalue == 'compact' && (ratiovalue == 'octa' || ratiovalue == 'trio')){ ratiovalue = 'tetra' } break } nodeSelectorvalue = "${nodevalue}${ratiovalue}" break } case 'int': echo 'Shared node pool for int/pre-prod' nodeSelectorvalue = "preprod-cost-optimized" break case ['dev', 'ftr', 'stg']: echo 'Shared node pool for dev and ftr' nodeSelectorvalue = "${env.BU}-shared" break default: log.error('Unable to fetch environment') } return nodeSelectorvalue }