Wait for PVC phase change after Job created

pull/273/head
Frostebite 2021-06-18 20:35:33 +01:00
parent 1b24f65522
commit 09ed77c94a
3 changed files with 5 additions and 25 deletions

14
dist/index.js vendored
View File

@ -735,7 +735,6 @@ const client_node_1 = __webpack_require__(89679);
const stream_1 = __webpack_require__(92413); const stream_1 = __webpack_require__(92413);
const async_wait_until_1 = __webpack_require__(41299); const async_wait_until_1 = __webpack_require__(41299);
const base64 = __webpack_require__(85848); const base64 = __webpack_require__(85848);
const pollInterval = 20000;
class Kubernetes { class Kubernetes {
constructor(buildParameters, baseImage) { constructor(buildParameters, baseImage) {
this.buildId = ''; this.buildId = '';
@ -865,7 +864,6 @@ class Kubernetes {
}; };
yield this.kubeClient.createNamespacedPersistentVolumeClaim(this.namespace, pvc); yield this.kubeClient.createNamespacedPersistentVolumeClaim(this.namespace, pvc);
core.info(`Persistent Volume created, ${yield this.getPVCPhase()}`); core.info(`Persistent Volume created, ${yield this.getPVCPhase()}`);
yield async_wait_until_1.waitUntil(() => __awaiter(this, void 0, void 0, function* () { return (yield this.getPVCPhase()) !== 'Pending'; }));
}); });
} }
getJobSpec(command, image) { getJobSpec(command, image) {
@ -1001,7 +999,7 @@ class Kubernetes {
core.info('Creating build job'); core.info('Creating build job');
yield this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec); yield this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec);
core.info('Job created'); core.info('Job created');
// await this.watchPersistentVolumeClaimUntilBoundToContainer(); yield this.watchPersistentVolumeClaimUntilBoundToContainer();
core.info('PVC Bound'); core.info('PVC Bound');
this.setPodNameAndContainerName(yield this.getPod()); this.setPodNameAndContainerName(yield this.getPod());
core.info('Watching pod and streaming logs'); core.info('Watching pod and streaming logs');
@ -1069,16 +1067,8 @@ class Kubernetes {
}); });
} }
watchPersistentVolumeClaimUntilBoundToContainer() { watchPersistentVolumeClaimUntilBoundToContainer() {
var _a;
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
yield new Promise((resolve) => setTimeout(resolve, pollInterval)); yield async_wait_until_1.waitUntil(() => __awaiter(this, void 0, void 0, function* () { return (yield this.getPVCPhase()) !== 'Pending'; }));
const queryResult = yield this.kubeClient.readNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
if (((_a = queryResult.body.status) === null || _a === void 0 ? void 0 : _a.phase) === 'Pending') {
yield this.watchPersistentVolumeClaimUntilBoundToContainer();
}
else {
core.info('Persistent Volume ready for claims');
}
}); });
} }
getPodStatusPhase() { getPodStatusPhase() {

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -9,8 +9,6 @@ import { waitUntil } from 'async-wait-until';
const base64 = require('base-64'); const base64 = require('base-64');
const pollInterval = 20000;
class Kubernetes implements RemoteBuilderProviderInterface { class Kubernetes implements RemoteBuilderProviderInterface {
private kubeConfig: KubeConfig; private kubeConfig: KubeConfig;
private kubeClient: k8s.CoreV1Api; private kubeClient: k8s.CoreV1Api;
@ -149,7 +147,6 @@ class Kubernetes implements RemoteBuilderProviderInterface {
}; };
await this.kubeClient.createNamespacedPersistentVolumeClaim(this.namespace, pvc); await this.kubeClient.createNamespacedPersistentVolumeClaim(this.namespace, pvc);
core.info(`Persistent Volume created, ${await this.getPVCPhase()}`); core.info(`Persistent Volume created, ${await this.getPVCPhase()}`);
await waitUntil(async () => (await this.getPVCPhase()) !== 'Pending');
} }
getJobSpec(command: string[], image: string) { getJobSpec(command: string[], image: string) {
@ -285,7 +282,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
core.info('Creating build job'); core.info('Creating build job');
await this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec); await this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec);
core.info('Job created'); core.info('Job created');
// await this.watchPersistentVolumeClaimUntilBoundToContainer(); await this.watchPersistentVolumeClaimUntilBoundToContainer();
core.info('PVC Bound'); core.info('PVC Bound');
this.setPodNameAndContainerName(await this.getPod()); this.setPodNameAndContainerName(await this.getPod());
core.info('Watching pod and streaming logs'); core.info('Watching pod and streaming logs');
@ -356,14 +353,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
} }
async watchPersistentVolumeClaimUntilBoundToContainer() { async watchPersistentVolumeClaimUntilBoundToContainer() {
await new Promise((resolve) => setTimeout(resolve, pollInterval)); await waitUntil(async () => (await this.getPVCPhase()) !== 'Pending');
const queryResult = await this.kubeClient.readNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
if (queryResult.body.status?.phase === 'Pending') {
await this.watchPersistentVolumeClaimUntilBoundToContainer();
} else {
core.info('Persistent Volume ready for claims');
}
} }
async getPodStatusPhase() { async getPodStatusPhase() {