UNPKG

@enspirit/emb

Version:

A replacement for our Makefile-for-monorepos

51 lines (50 loc) 1.68 kB
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); } }