in src/utilities/manifestStabilityUtils.ts [100:151]
export async function checkPodStatus(
kubectl: Kubectl,
pod: Resource
): Promise<void> {
const sleepTimeout = 10 * 1000 // 10 seconds
const iterations = 60 // 60 * 10 seconds timeout = 10 minutes max timeout
let podStatus
let kubectlDescribeNeeded = false
for (let i = 0; i < iterations; i++) {
await sleep(sleepTimeout)
core.debug(`Polling for pod status: ${pod.name}`)
podStatus = await getPodStatus(kubectl, pod)
if (
podStatus &&
podStatus?.phase !== 'Pending' &&
podStatus?.phase !== 'Unknown'
) {
break
}
}
podStatus = await getPodStatus(kubectl, pod)
switch (podStatus.phase) {
case 'Succeeded':
case 'Running':
if (isPodReady(podStatus)) {
console.log(`pod/${pod.name} is successfully rolled out`)
} else {
kubectlDescribeNeeded = true
}
break
case 'Pending':
if (!isPodReady(podStatus)) {
core.warning(`pod/${pod.name} rollout status check timed out`)
kubectlDescribeNeeded = true
}
break
case 'Failed':
core.error(`pod/${pod.name} rollout failed`)
kubectlDescribeNeeded = true
break
default:
core.warning(`pod/${pod.name} rollout status: ${podStatus.phase}`)
}
if (kubectlDescribeNeeded) {
await kubectl.describe(POD, pod.name, IS_SILENT, pod.namespace)
}
}