1import * as _ from 'lodash-es'2import { throwIf } from '../../sharedF/throwErrorF/throwIfF.mts'4export const k8sPortRange = [30000, 32767] as const6type NodePortTmplProps = {7 name: string8 nodePort: number9 svcPort: number10 inclUdp?: boolean11 selector?: Record<string, string>12 externalTrafficPolicy?: 'Cluster' | 'Local'13}15export const genericNodePortTmpl = ({16 name, nodePort, svcPort, inclUdp=false, selector, externalTrafficPolicy17}: NodePortTmplProps) => {18 const sel = selector || {name}19 const [minPort, maxPort] = k8sPortRange21 return {22 apiVersion: 'v1',23 kind: 'Service',24 metadata: {25 name,26 },27 spec: {28 ports: _.compact([29 {30 nodePort,31 port: svcPort,32 protocol: 'TCP',33 targetPort: svcPort,34 name: `tcp-${nodePort}`35 },36 inclUdp && {37 nodePort,38 port: svcPort,39 protocol: 'UDP',40 targetPort: svcPort,41 name: `udp-${nodePort}`42 }43 ]),44 selector: sel,45 type: 'NodePort',46 ...(externalTrafficPolicy ? {externalTrafficPolicy} : {})47 },48 }49}