unity-builder/src/model/remote-builder/kubernetes-utils.ts

35 lines
1.1 KiB
TypeScript

import { CoreV1Api } from '@kubernetes/client-node';
import waitUntil from 'async-wait-until';
import * as core from '@actions/core';
class KubernetesUtilities {
static async findPodFromJob(kubeClient: CoreV1Api, jobName: string, namespace: string) {
const pod = (await kubeClient.listNamespacedPod(namespace)).body.items.find(
(x) => x.metadata?.labels?.['job-name'] === jobName,
);
if (pod === undefined) {
throw new Error("pod with job-name label doesn't exist");
}
return pod;
}
static async watchUntilPodRunning(kubeClient: CoreV1Api, podName: string, namespace: string) {
let success: boolean = false;
core.info(`Watching ${podName} ${namespace}`);
await waitUntil(
async () => {
const phase = (await kubeClient.readNamespacedPodStatus(podName, namespace))?.body.status?.phase;
success = phase === 'Running';
if (success || phase !== 'Pending') return true;
return false;
},
{
timeout: 500000,
intervalBetweenAttempts: 15000,
},
);
return success;
}
}
export default KubernetesUtilities;