1import { getReqKlusterCtx } from './ctxF/klusterCtxF.mts'2import { getClusterCfg } from '../../serverF/clusterInfoF.mts'3import { tcpProbePort } from '../../serverF/tcpProbePortAI.mts'4import { collectNodePorts, collectPortRanges } from '../testsF/nodePortValidationAI.mts'5import { portInOpenA } from '../../sharedF/portInOpenAAI.mts'6import { assertDefined } from '../../sharedF/assertsF/assertDefinedF.mts'7import { chalkGreen, chalkRed, chalkGray } from '../../serverF/libChalkF.mts'9export const checkPorts = async () => {10 const {cluster_name} = getReqKlusterCtx()11 const {nodeIpsExtHost} = getClusterCfg({cluster_name})12 assertDefined(nodeIpsExtHost, {cluster_name})13 const assigns = (await collectNodePorts()).filter(a => a.cluster === cluster_name)14 const ranges = (await collectPortRanges()).find(r => r.cluster === cluster_name)16 console.log(`Probing ${assigns.length} nodeport(s) on ${nodeIpsExtHost} (cluster ${cluster_name})${openNote}...`)17 let reachable = 0, unreachable = 018 for (const {svcName, port} of assigns) {19 const ok = await tcpProbePort(nodeIpsExtHost, port)20 const declared = portInOpenA(port, ranges?.openPortNoA)21 const icon = ok ? chalkGreen('REACHABLE') : chalkRed('unreachable')23 console.log(` ${port} (${svcName}) ${icon}${declTag}`)24 if (ok) reachable++; else unreachable++25 }26 console.log(`\n${reachable}/${assigns.length} reachable, ${unreachable} unreachable`)27}28checkPorts.cliDescript = 'probe cluster nodeports against nodeIpsExtHost (router reachability)'