1import * as _ from 'lodash-es'2import { CoreV1Api, type V1Pod } from '@kubernetes/client-node'3import { resourcesAsPods } from './getSinglePodF.mts'4import { betVerboseLog } from '../../sharedF/betterConsLogF.mts'5import { getKubeApis } from './getApisF.mts'6import './betLogKubeFormattersAI.mts'7import { throwIf } from '../../sharedF/throwErrorF/throwIfF.mts'8import { assertDefined } from '../../sharedF/assertsF/assertDefinedF.mts'9import { type WithClusterName } from './ctxF/klusterCtxF.mts'10import { getOfflineReason, getKubeTimeoutSec } from './ctxF/klusterReachabilityAI.mts'11import { throPtErr } from '../../sharedF/throwErrorF/sharedErrF.mts'13type Get1ClusterPodsProps = WithClusterName & {14 labels?: Record<string, string>15 fuzzyPodName?: string16 limit?: number17}19export const get1ClusterPods = async ({cluster_name, labels, fuzzyPodName, limit}: Get1ClusterPodsProps) => {20 const offlineReason = getOfflineReason(cluster_name)21 if (offlineReason) {23 }25 const {kubeConfig} = await getKubeApis({cluster_name})26 const podsApi = kubeConfig.makeApiClient(CoreV1Api)28 let labelQueryStr29 if (labels) {30 labelQueryStr = _.map(labels, (val, key) => `${key}=${val}`).join(',')31 }32 const maxLen = 50033 if (fuzzyPodName) {34 betVerboseLog(`setting limit=${maxLen} since fuzzyPodName`)35 limit = maxLen36 }38 const timeoutMs = getKubeTimeoutSec(cluster_name) * 100039 let {items: pods} = await podsApi.listNamespacedPod({namespace: 'default', limit, labelSelector: labelQueryStr, signal: AbortSignal.timeout(timeoutMs)} as any)41 pods = resourcesAsPods(pods)42 pods = _.chain(pods).map((pod) => {43 assertDefined(pod.metadata)44 delete pod.metadata.managedFields45 return pod46 }).sortBy((pod) => {47 return pod.metadata?.creationTimestamp48 }).reverse().value()49 const podsLen = pods.length51 if (fuzzyPodName) {52 pods = pods.filter((pod) => pod.metadata?.name?.includes(fuzzyPodName))54 }56 return pods57}