9import { BatchV1Api } from '@kubernetes/client-node' 13type CreateRegistryProps = { 19export const createRegistry = async ({dockreg_host, cluster_name, sizeGb = 200}: CreateRegistryProps): Promise<boolean> => { 20 const registryName = dockreg_host.split('.')[0] 22 const kanikoCluster = cluster_name 26 if (kanikoCredsFile !== registryCredsFile) { 27 const kanikoCredsPath = `${secretsDir}/${kanikoCredsFile}` 28 if (fs.existsSync(kanikoCredsPath)) { 29 fs.copyFileSync(kanikoCredsPath, `${secretsDir}/${registryCredsFile}`) 34 const clusterOnlyCtx = { 36 cluster_name: existingCtx.cluster_name || cluster_name, 38 nonWcHostname: undefined, 39 wcHostname: undefined, 42 await dockBuildCtx.run({dockName: 'docker'}, async () => { 43 await klusterCtx.run(clusterOnlyCtx as any, async () => { 44 console.log(` creating ${registryName}...`) 45 await actionCtx.run({action: 'apply'}, () => 51 for (let i = 0; i < 45; i++) { 52 const pod = await klusterCtx.run({cluster_name} as any, () => getSinglePod({cluster_name, labels: {name: registryName}})) 59export const deleteFailedKanikoJobs = async ({name, cluster_name}: {name: string, cluster_name: string}) => { 61 const batchApi = kubeConfig.makeApiClient(BatchV1Api) 62 const {items: jobs} = await batchApi.listNamespacedJob({namespace: 'default', labelSelector: `cluster_name=${cluster_name}`}) 63 const failedJobs = jobs.filter(job => { 64 const jobName = job.metadata?.name 65 if (!jobName?.includes(name)) return false 66 return job.status?.failed 68 if (failedJobs.length) { 69 console.log(` deleting ${failedJobs.length} failed kaniko job(s)...`) 70 for (const job of failedJobs) { 71 const jobName = job.metadata?.name! 73 await batchApi.deleteNamespacedJob({name: jobName, namespace: 'default', propagationPolicy: 'Background'})