@enspirit/emb
Version:
A replacement for our Makefile-for-monorepos
51 lines (50 loc) • 1.68 kB
JavaScript
import { getContext } from '../../index.js';
import * as z from 'zod';
import { AbstractOperation } from '../../operations/index.js';
const schema = z.object({
namespace: z.string().describe('The namespace in which to restart pods'),
deployments: z
.array(z.string())
.optional()
.describe('The list of deployments to restart'),
});
export class PodsRestartOperation extends AbstractOperation {
constructor() {
super(schema);
}
async _run(input) {
const { monorepo } = getContext();
const manager = monorepo.taskManager();
const deployments = input?.deployments || (await this.listDeployments(input.namespace));
const tasks = deployments.map((name) => {
return {
title: `Restart ${name}`,
task: async () => {
return this.patchDeployment(input.namespace, name);
},
};
});
manager.add(tasks);
await manager.runAll();
}
async patchDeployment(namespace, name) {
const patch = [
{
op: 'add',
path: '/spec/template/metadata/annotations/kubectl.kubernetes.io~1restartedAt',
value: new Date().toISOString(),
},
];
return this.context.kubernetes.apps.patchNamespacedDeployment({
namespace,
name,
body: patch,
});
}
async listDeployments(namespace) {
const { items } = await this.context.kubernetes.apps.listNamespacedDeployment({
namespace,
});
return items.map((i) => i.metadata?.name);
}
}