Skip to content

Commit c7951fc

Browse files
committed
Resolve PR comments
1 parent 7ec4253 commit c7951fc

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/cp.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import * as fs from 'fs';
22
import { WritableStreamBuffer } from 'stream-buffers';
33
import * as tar from 'tar';
4-
import { tmpdir } from 'os';
5-
import { randomUUID } from 'crypto';
64
import { KubeConfig } from './config';
75
import { Exec } from './exec';
6+
import { generateTmpFileName } from './util';
87

98
export class Cp {
109
public execInstance: Exec;
@@ -28,7 +27,7 @@ export class Cp {
2827
tgtPath: string,
2928
cwd?: string,
3029
): Promise<void> {
31-
const tmpFileName = `${tmpdir()}/${randomUUID()}`;
30+
const tmpFileName = await generateTmpFileName();
3231
const command = ['tar', 'zcf', '-'];
3332
if (cwd) {
3433
command.push('-C', cwd);
@@ -74,7 +73,7 @@ export class Cp {
7473
tgtPath: string,
7574
cwd?: string,
7675
): Promise<void> {
77-
const tmpFileName = `${tmpdir()}/${randomUUID()}`;
76+
const tmpFileName = await generateTmpFileName();
7877
const command = ['tar', 'xf', '-', '-C', tgtPath];
7978
await tar.c({ file: tmpFileName, cwd }, [srcPath]);
8079
const readStream = fs.createReadStream(tmpFileName);

src/util.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { tmpdir } from 'os';
2+
import { randomUUID } from 'crypto';
3+
import { promises as fs, constants as fsConstants } from 'fs';
14
import { CoreV1Api, V1Container, V1Pod } from './gen/api';
25

36
export async function podsForNode(api: CoreV1Api, nodeName: string): Promise<V1Pod[]> {
@@ -142,3 +145,24 @@ export function totalForResource(pod: V1Pod, resource: string): ResourceStatus {
142145
});
143146
return new ResourceStatus(reqTotal, limitTotal, resource);
144147
}
148+
149+
export async function generateTmpFileName(): Promise<string> {
150+
let tmpFileName: string;
151+
152+
let i = 0;
153+
do {
154+
tmpFileName = `${tmpdir()}/${randomUUID()}`;
155+
156+
try {
157+
await fs.access(tmpFileName, fsConstants.W_OK);
158+
159+
return tmpFileName;
160+
} catch (err) {
161+
console.warn('Tmp file already exists');
162+
}
163+
164+
i++;
165+
} while (i < 10);
166+
167+
throw new Error('Cannot generate tmp file name');
168+
}

0 commit comments

Comments
 (0)