@milaboratories/pl-deployments 1.1.12 → 1.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +98 -88
- package/dist/index.mjs.map +1 -1
- package/dist/ssh/connection_info.d.ts +4 -1
- package/dist/ssh/connection_info.d.ts.map +1 -1
- package/dist/ssh/pl.d.ts +6 -2
- package/dist/ssh/pl.d.ts.map +1 -1
- package/dist/ssh/pl_paths.d.ts.map +1 -1
- package/dist/ssh/ssh.d.ts +1 -1
- package/dist/ssh/ssh.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/ssh/__tests__/pl-docker.test.ts +24 -1
- package/src/ssh/__tests__/ssh-docker.test.ts +7 -7
- package/src/ssh/connection_info.ts +5 -0
- package/src/ssh/pl.ts +26 -11
- package/src/ssh/pl_paths.ts +1 -1
- package/src/ssh/ssh.ts +1 -1
package/dist/ssh/pl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/ssh/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOzE,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/ssh/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOzE,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,qBAAa,KAAK;aAGE,MAAM,EAAE,QAAQ;aAChB,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,SAAS,CAA0B;gBAEzB,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,SAAS,EACnB,QAAQ,EAAE,MAAM;IAG5B,IAAI;;;;WAOS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IAU9E,OAAO;IAId,yFAAyF;IAC5E,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAMjD;+DAC2D;IAC9C,KAAK;IAkBlB;+DAC2D;IAC9C,IAAI;IAgBjB,wFAAwF;IAC3E,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAMtC,6CAA6C;IAChC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1C;;8CAE0C;IAC7B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAiH5D,oCAAoC,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,sBAAsB,EAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI;;;;;IAoCZ;;;;;0DAKsD;IACzC,gBAAgB,CAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IA+CpB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAc3C,wBAAwB,CAAC,QAAQ,GAAE,MAAa,EAAE,KAAK,SAAK,EAAE,WAAW,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAehG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK/D,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IA2B/D,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUnC,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxB,oBAAoB;CAYlC;AAED,KAAK,IAAI,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC;AAcF,KAAK,QAAQ,GAAG;IACd,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,eAAe,CAAC,EAAE,2BAA2B,CAAC;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl_paths.d.ts","sourceRoot":"","sources":["../../src/ssh/pl_paths.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAMnE,eAAO,MAAM,YAAY,+BAA+B,CAAC;AACzD,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAEtE,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,UAEzC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,UAE7C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAEhE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE5D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pl_paths.d.ts","sourceRoot":"","sources":["../../src/ssh/pl_paths.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAMnE,eAAO,MAAM,YAAY,+BAA+B,CAAC;AACzD,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAEtE,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,UAEzC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,UAE7C;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAEhE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAE5D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAExD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAExD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAEhE;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,UAEhD;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,UAEhD"}
|
package/dist/ssh/ssh.d.ts
CHANGED
|
@@ -120,7 +120,7 @@ export declare class SshClient {
|
|
|
120
120
|
* @param remotePath - The path to the remote directory.
|
|
121
121
|
* @returns A promise that resolves when the directory is created.
|
|
122
122
|
*/
|
|
123
|
-
|
|
123
|
+
ensureRemoteDirCreated(remotePath: string, mode?: number): Promise<void>;
|
|
124
124
|
/**
|
|
125
125
|
* Downloads a file from the remote server to a local path via SFTP.
|
|
126
126
|
* @param remotePath - The remote file path on the server.
|
package/dist/ssh/ssh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/ssh/ssh.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/ssh/ssh.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-deployments",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"pl-version": "1.
|
|
3
|
+
"version": "1.1.14",
|
|
4
|
+
"pl-version": "1.20.1",
|
|
5
5
|
"description": "MiLaboratories Platforma Backend code service run wrapper",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -65,7 +65,12 @@ describe('SshPl', async () => {
|
|
|
65
65
|
const arch = await sshPl.getArch();
|
|
66
66
|
const remoteHome = await sshPl.getUserHomeDirectory();
|
|
67
67
|
await sshPl.stop(); // ensure stopped
|
|
68
|
-
await sshPl.downloadBinariesAndUploadToTheServer(
|
|
68
|
+
await sshPl.downloadBinariesAndUploadToTheServer(
|
|
69
|
+
downloadDestination,
|
|
70
|
+
{ type: 'Download', version: getDefaultPlVersion() },
|
|
71
|
+
remoteHome,
|
|
72
|
+
arch,
|
|
73
|
+
);
|
|
69
74
|
|
|
70
75
|
const pathSupervisor = `${plpath.supervisorBinDir(remoteHome, arch.arch)}/supervisord`;
|
|
71
76
|
const pathMinio = `${plpath.minioDir(remoteHome, arch.arch)}/minio`;
|
|
@@ -179,6 +184,24 @@ describe('SshPl', async () => {
|
|
|
179
184
|
expect(config).contain('bin-ga');
|
|
180
185
|
});
|
|
181
186
|
|
|
187
|
+
it('Start ssh with old platforma, restart it with newer one', async () => {
|
|
188
|
+
await sshPl.platformaInit({
|
|
189
|
+
localWorkdir: downloadDestination,
|
|
190
|
+
license: { type: 'env' },
|
|
191
|
+
plBinary: { type: 'Download', version: '1.18.3' },
|
|
192
|
+
});
|
|
193
|
+
let isAlive = await sshPl?.isAlive();
|
|
194
|
+
expect(isAlive.allAlive).toBe(true);
|
|
195
|
+
|
|
196
|
+
await sshPl.platformaInit({
|
|
197
|
+
localWorkdir: downloadDestination,
|
|
198
|
+
license: { type: 'env' },
|
|
199
|
+
// latest version of pl binary will be get by default
|
|
200
|
+
});
|
|
201
|
+
isAlive = await sshPl?.isAlive();
|
|
202
|
+
expect(isAlive.allAlive).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
|
|
182
205
|
it('Download pl. We have archive and extracted data', async () => {
|
|
183
206
|
const arch = await sshPl.getArch();
|
|
184
207
|
|
|
@@ -44,7 +44,7 @@ describe('SSH Tests', () => {
|
|
|
44
44
|
});
|
|
45
45
|
it('should create all directories if none exist', async () => {
|
|
46
46
|
const remotePath = '/home/pl-doctor/upload/nested/directory';
|
|
47
|
-
await expect(client.
|
|
47
|
+
await expect(client.ensureRemoteDirCreated(remotePath)).resolves.not.toThrow();
|
|
48
48
|
|
|
49
49
|
// Additional check to ensure the directory exists
|
|
50
50
|
await client.withSftp(async (sftp) => {
|
|
@@ -61,14 +61,14 @@ describe('SSH Tests', () => {
|
|
|
61
61
|
it('should handle existing directories gracefully', async () => {
|
|
62
62
|
const remotePath = '/home/pl-doctor/upload/nested';
|
|
63
63
|
|
|
64
|
-
await expect(client.
|
|
65
|
-
await expect(client.
|
|
64
|
+
await expect(client.ensureRemoteDirCreated(remotePath)).resolves.not.toThrow();
|
|
65
|
+
await expect(client.ensureRemoteDirCreated(remotePath)).resolves.not.toThrow();
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('should throw an error if an invalid path is provided', async () => {
|
|
69
69
|
const remotePath = '/invalid_path/nested';
|
|
70
70
|
|
|
71
|
-
await expect(client.
|
|
71
|
+
await expect(client.ensureRemoteDirCreated(remotePath)).rejects.toThrow();
|
|
72
72
|
});
|
|
73
73
|
|
|
74
74
|
it('Upload directory', async () => {
|
|
@@ -133,9 +133,9 @@ describe('SSH Tests', () => {
|
|
|
133
133
|
|
|
134
134
|
it('Remove directory', async () => {
|
|
135
135
|
const rootFolder = '/home/pl-doctor/upload';
|
|
136
|
-
await client.
|
|
137
|
-
await client.
|
|
138
|
-
await client.
|
|
136
|
+
await client.ensureRemoteDirCreated(`${rootFolder}/upload/nested`);
|
|
137
|
+
await client.ensureRemoteDirCreated(`${rootFolder}/2-nested`);
|
|
138
|
+
await client.ensureRemoteDirCreated(`${rootFolder}/2-nested/3-sub`);
|
|
139
139
|
await client.writeFileOnTheServer(`${rootFolder}/2-nested/3-sub/qwerty.txt`, 'HELLO FROM SSH');
|
|
140
140
|
|
|
141
141
|
const text = await client.readFile(`${rootFolder}/2-nested/3-sub/qwerty.txt`);
|
|
@@ -31,6 +31,9 @@ export const ConnectionInfo = z.object({
|
|
|
31
31
|
// It's false by default because it was added later,
|
|
32
32
|
// and in some deployments there won't be useGlobalAccess flag in the file.
|
|
33
33
|
useGlobalAccess: z.boolean().default(false),
|
|
34
|
+
|
|
35
|
+
// We added the field afterwards, the pl backend was this version.
|
|
36
|
+
plVersion: z.string().default('1.18.3'),
|
|
34
37
|
});
|
|
35
38
|
/** The content of the file that holds all the info about the connection on the remote server. */
|
|
36
39
|
export type ConnectionInfo = z.infer<typeof ConnectionInfo>;
|
|
@@ -44,12 +47,14 @@ export function newConnectionInfo(
|
|
|
44
47
|
plPassword: string,
|
|
45
48
|
ports: SshPlPorts,
|
|
46
49
|
useGlobalAccess: boolean,
|
|
50
|
+
plVersion: string,
|
|
47
51
|
): ConnectionInfo {
|
|
48
52
|
return {
|
|
49
53
|
plUser,
|
|
50
54
|
plPassword,
|
|
51
55
|
ports,
|
|
52
56
|
useGlobalAccess,
|
|
57
|
+
plVersion,
|
|
53
58
|
};
|
|
54
59
|
}
|
|
55
60
|
|
package/src/ssh/pl.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { SupervisorStatus } from './supervisord';
|
|
|
15
15
|
import { supervisorStatus, supervisorStop as supervisorCtlShutdown, generateSupervisordConfig, supervisorCtlStart } from './supervisord';
|
|
16
16
|
import type { ConnectionInfo, SshPlPorts } from './connection_info';
|
|
17
17
|
import { newConnectionInfo, parseConnectionInfo, stringifyConnectionInfo } from './connection_info';
|
|
18
|
+
import type { PlBinarySourceDownload } from '../common/pl_binary';
|
|
18
19
|
|
|
19
20
|
export class SshPl {
|
|
20
21
|
private initState: PlatformaInitState = {};
|
|
@@ -120,6 +121,7 @@ export class SshPl {
|
|
|
120
121
|
...defaultSshPlConfig,
|
|
121
122
|
...options,
|
|
122
123
|
};
|
|
124
|
+
state.plBinaryOps = ops.plBinary;
|
|
123
125
|
state.arch = await this.getArch();
|
|
124
126
|
state.remoteHome = await this.getUserHomeDirectory();
|
|
125
127
|
state.alive = await this.isAlive();
|
|
@@ -129,16 +131,19 @@ export class SshPl {
|
|
|
129
131
|
if (!state.userCredentials) {
|
|
130
132
|
throw new Error(`SshPl.platformaInit: platforma is alive but userCredentials are not found`);
|
|
131
133
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
+
const sameGA = state.userCredentials.useGlobalAccess == ops.useGlobalAccess;
|
|
135
|
+
const samePlVersion = state.userCredentials.plVersion == ops.plBinary!.version;
|
|
136
|
+
state.needRestart = !(sameGA && samePlVersion);
|
|
137
|
+
this.logger.info(`SshPl.platformaInit: need restart? ${state.needRestart}`);
|
|
138
|
+
|
|
139
|
+
if (!state.needRestart)
|
|
134
140
|
return state.userCredentials;
|
|
135
141
|
|
|
136
|
-
|
|
137
|
-
await this.stopAndClean();
|
|
142
|
+
await this.stop();
|
|
138
143
|
}
|
|
139
144
|
|
|
140
145
|
const downloadRes = await this.downloadBinariesAndUploadToTheServer(
|
|
141
|
-
ops.localWorkdir, state.remoteHome, state.arch,
|
|
146
|
+
ops.localWorkdir, ops.plBinary!, state.remoteHome, state.arch,
|
|
142
147
|
);
|
|
143
148
|
state.binPaths = { ...downloadRes, history: undefined };
|
|
144
149
|
state.downloadedBinaries = downloadRes.history;
|
|
@@ -176,7 +181,7 @@ export class SshPl {
|
|
|
176
181
|
}
|
|
177
182
|
|
|
178
183
|
for (const dir of config.dirsToCreate) {
|
|
179
|
-
await this.sshClient.
|
|
184
|
+
await this.sshClient.ensureRemoteDirCreated(dir);
|
|
180
185
|
this.logger.info(`Created directory ${dir}`);
|
|
181
186
|
}
|
|
182
187
|
|
|
@@ -200,6 +205,7 @@ export class SshPl {
|
|
|
200
205
|
config.plPassword,
|
|
201
206
|
state.ports,
|
|
202
207
|
notEmpty(ops.useGlobalAccess),
|
|
208
|
+
ops.plBinary!.version,
|
|
203
209
|
);
|
|
204
210
|
await this.sshClient.writeFileOnTheServer(
|
|
205
211
|
plpath.connectionInfo(state.remoteHome),
|
|
@@ -221,6 +227,7 @@ export class SshPl {
|
|
|
221
227
|
|
|
222
228
|
public async downloadBinariesAndUploadToTheServer(
|
|
223
229
|
localWorkdir: string,
|
|
230
|
+
plBinary: PlBinarySourceDownload,
|
|
224
231
|
remoteHome: string,
|
|
225
232
|
arch: Arch,
|
|
226
233
|
) {
|
|
@@ -228,7 +235,7 @@ export class SshPl {
|
|
|
228
235
|
try {
|
|
229
236
|
const pl = await this.downloadAndUntar(
|
|
230
237
|
localWorkdir, remoteHome, arch,
|
|
231
|
-
'pl', `pl-${
|
|
238
|
+
'pl', `pl-${plBinary.version}`,
|
|
232
239
|
);
|
|
233
240
|
state.push(pl);
|
|
234
241
|
|
|
@@ -273,7 +280,7 @@ export class SshPl {
|
|
|
273
280
|
): Promise<DownloadAndUntarState> {
|
|
274
281
|
const state: DownloadAndUntarState = {};
|
|
275
282
|
state.binBasePath = plpath.binariesDir(remoteHome);
|
|
276
|
-
await this.sshClient.
|
|
283
|
+
await this.sshClient.ensureRemoteDirCreated(state.binBasePath);
|
|
277
284
|
state.binBasePathCreated = true;
|
|
278
285
|
|
|
279
286
|
let downloadBinaryResult: DownloadBinaryResult | null = null;
|
|
@@ -301,7 +308,7 @@ export class SshPl {
|
|
|
301
308
|
state.remoteDir = upath.join(state.binBasePath, state.downloadResult.baseName);
|
|
302
309
|
state.remoteArchivePath = state.remoteDir + '.tgz';
|
|
303
310
|
|
|
304
|
-
await this.sshClient.
|
|
311
|
+
await this.sshClient.ensureRemoteDirCreated(state.remoteDir);
|
|
305
312
|
await this.sshClient.uploadFile(state.localArchivePath, state.remoteArchivePath);
|
|
306
313
|
|
|
307
314
|
// TODO: Create a proper archive to avoid xattr warnings
|
|
@@ -432,19 +439,25 @@ export type SshPlConfig = {
|
|
|
432
439
|
localWorkdir: string;
|
|
433
440
|
license: PlLicenseMode;
|
|
434
441
|
useGlobalAccess?: boolean;
|
|
442
|
+
plBinary?: PlBinarySourceDownload;
|
|
435
443
|
};
|
|
436
444
|
|
|
437
445
|
const defaultSshPlConfig: Pick<
|
|
438
446
|
SshPlConfig,
|
|
439
|
-
'useGlobalAccess'
|
|
447
|
+
| 'useGlobalAccess'
|
|
448
|
+
| 'plBinary'
|
|
440
449
|
> = {
|
|
441
450
|
useGlobalAccess: false,
|
|
451
|
+
plBinary: {
|
|
452
|
+
type: 'Download',
|
|
453
|
+
version: getDefaultPlVersion(),
|
|
454
|
+
},
|
|
442
455
|
};
|
|
443
456
|
|
|
444
457
|
type BinPaths = {
|
|
445
458
|
history?: DownloadAndUntarState[];
|
|
446
459
|
minioRelPath: string;
|
|
447
|
-
downloadedPl:
|
|
460
|
+
downloadedPl: string;
|
|
448
461
|
};
|
|
449
462
|
|
|
450
463
|
type DownloadAndUntarState = {
|
|
@@ -462,10 +475,12 @@ type DownloadAndUntarState = {
|
|
|
462
475
|
|
|
463
476
|
type PlatformaInitState = {
|
|
464
477
|
localWorkdir?: string;
|
|
478
|
+
plBinaryOps?: PlBinarySourceDownload;
|
|
465
479
|
arch?: Arch;
|
|
466
480
|
remoteHome?: string;
|
|
467
481
|
alive?: SupervisorStatus;
|
|
468
482
|
userCredentials?: ConnectionInfo;
|
|
483
|
+
needRestart?: boolean;
|
|
469
484
|
downloadedBinaries?: DownloadAndUntarState[];
|
|
470
485
|
binPaths?: BinPaths;
|
|
471
486
|
ports?: SshPlPorts;
|
package/src/ssh/pl_paths.ts
CHANGED
|
@@ -24,7 +24,7 @@ export function platformaDir(remoteHome: string, arch: string) {
|
|
|
24
24
|
return upath.join(platformaBaseDir(remoteHome, arch), 'binaries');
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export function platformaBin(remoteHome: string, arch: string) {
|
|
27
|
+
export function platformaBin(remoteHome: string, arch: string): string {
|
|
28
28
|
return upath.join(platformaDir(remoteHome, arch), 'platforma');
|
|
29
29
|
}
|
|
30
30
|
|
package/src/ssh/ssh.ts
CHANGED
|
@@ -586,7 +586,7 @@ export class SshClient {
|
|
|
586
586
|
* @param remotePath - The path to the remote directory.
|
|
587
587
|
* @returns A promise that resolves when the directory is created.
|
|
588
588
|
*/
|
|
589
|
-
public
|
|
589
|
+
public ensureRemoteDirCreated(remotePath: string, mode: number = 0o755): Promise<void> {
|
|
590
590
|
return this.withSftp(async (sftp) => {
|
|
591
591
|
const directories = remotePath.split('/');
|
|
592
592
|
let currentPath = '';
|