@alwaysai/device-agent 2.1.1-1 → 2.1.3
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/lib/application-control/config.d.ts.map +1 -1
- package/lib/application-control/config.js +7 -7
- package/lib/application-control/config.js.map +1 -1
- package/lib/application-control/environment-variables-and-passthrough-update.d.ts +15 -0
- package/lib/application-control/environment-variables-and-passthrough-update.d.ts.map +1 -0
- package/lib/application-control/environment-variables-and-passthrough-update.js +46 -0
- package/lib/application-control/environment-variables-and-passthrough-update.js.map +1 -0
- package/lib/application-control/environment-variables-and-passthrough-update.test.d.ts +2 -0
- package/lib/application-control/environment-variables-and-passthrough-update.test.d.ts.map +1 -0
- package/lib/application-control/environment-variables-and-passthrough-update.test.js +188 -0
- package/lib/application-control/environment-variables-and-passthrough-update.test.js.map +1 -0
- package/lib/application-control/environment-variables.d.ts +64 -4
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +86 -11
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/environment-variables.test.js +156 -10
- package/lib/application-control/environment-variables.test.js.map +1 -1
- package/lib/application-control/index.d.ts +4 -4
- package/lib/application-control/index.d.ts.map +1 -1
- package/lib/application-control/index.js +8 -8
- package/lib/application-control/index.js.map +1 -1
- package/lib/application-control/install.d.ts +1 -1
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +27 -26
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/utils.js +6 -6
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-message-handler.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-message-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.d.ts +2 -2
- package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
- package/lib/cloud-connection/shadow-handler.js +5 -5
- package/lib/cloud-connection/shadow-handler.js.map +1 -1
- package/lib/environment.d.ts +1 -0
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +2 -1
- package/lib/environment.js.map +1 -1
- package/lib/local-connection/constants.d.ts +1 -0
- package/lib/local-connection/constants.d.ts.map +1 -1
- package/lib/local-connection/constants.js +4 -1
- package/lib/local-connection/constants.js.map +1 -1
- package/lib/subcommands/app/env-vars.js +4 -4
- package/lib/subcommands/app/env-vars.js.map +1 -1
- package/package.json +3 -3
- package/readme.md +1 -1
- package/src/application-control/config.ts +9 -9
- package/src/application-control/environment-variables-and-passthrough-update.test.ts +221 -0
- package/src/application-control/environment-variables-and-passthrough-update.ts +56 -0
- package/src/application-control/environment-variables.test.ts +168 -12
- package/src/application-control/environment-variables.ts +91 -9
- package/src/application-control/index.ts +14 -14
- package/src/application-control/install.ts +37 -35
- package/src/application-control/utils.ts +6 -6
- package/src/cloud-connection/device-agent-message-handler.ts +2 -0
- package/src/cloud-connection/shadow-handler.ts +8 -8
- package/src/environment.ts +2 -1
- package/src/local-connection/constants.ts +7 -2
- package/src/subcommands/app/env-vars.ts +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAiBhE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAerB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;CACnB,iBAWA;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CAChB,iBAKA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB,iBAmCA;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,gBAOnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC;CACpB,iBAYA"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.writeDockerCompose = exports.readDockerCompose = exports.updateAppCfg = exports.updateAppCfgFile = exports.writeAppCfgFile = exports.readAppCfgFile = void 0;
|
|
4
|
-
const
|
|
5
|
-
const yaml_1 = require("yaml");
|
|
6
|
-
const utils_1 = require("./utils");
|
|
4
|
+
const app_1 = require("alwaysai/lib/core/app");
|
|
7
5
|
const util_1 = require("alwaysai/lib/util");
|
|
8
|
-
const docker_compose_1 = require("../docker/docker-compose");
|
|
9
6
|
const lodash_1 = require("lodash");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
7
|
+
const yaml_1 = require("yaml");
|
|
8
|
+
const docker_compose_1 = require("../docker/docker-compose");
|
|
9
|
+
const agent_config_1 = require("../infrastructure/agent-config");
|
|
13
10
|
const aai_error_1 = require("../util/aai-error");
|
|
11
|
+
const logger_1 = require("../util/logger");
|
|
12
|
+
const status_1 = require("./status");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
14
|
async function readAppCfgFile(props) {
|
|
15
15
|
const { projectId } = props;
|
|
16
16
|
await (0, utils_1.requireAppInstalled)({ projectId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EnvVars } from '@alwaysai/device-agent-schemas';
|
|
2
|
+
/**
|
|
3
|
+
* Updates (resets) the environment variables of the specified project
|
|
4
|
+
* if envVars are provided. Subsequently, adds the passthrough
|
|
5
|
+
* environment variable to all services if the passthrough is enabled.
|
|
6
|
+
*
|
|
7
|
+
* @param projectId - The project ID.
|
|
8
|
+
* @param envVars - The environment variables to add to the
|
|
9
|
+
* docker-compose.yaml
|
|
10
|
+
* @param passthroughEnabled - Whether to update the passthrough environment
|
|
11
|
+
* variable in the docker-compose.yaml
|
|
12
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateEnvVarsAndPassthroughInternal(projectId: string, envVars: EnvVars | undefined, passthroughEnabled?: boolean): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=environment-variables-and-passthrough-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables-and-passthrough-update.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables-and-passthrough-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAUzD;;;;;;;;;;;GAWG;AACH,wBAAsB,mCAAmC,CACvD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,kBAAkB,GAAE,OAAwC,GAC3D,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateEnvVarsAndPassthroughInternal = void 0;
|
|
4
|
+
const environment_1 = require("../environment");
|
|
5
|
+
const constants_1 = require("../local-connection/constants");
|
|
6
|
+
const logger_1 = require("../util/logger");
|
|
7
|
+
const config_1 = require("./config");
|
|
8
|
+
const environment_variables_1 = require("./environment-variables");
|
|
9
|
+
/**
|
|
10
|
+
* Updates (resets) the environment variables of the specified project
|
|
11
|
+
* if envVars are provided. Subsequently, adds the passthrough
|
|
12
|
+
* environment variable to all services if the passthrough is enabled.
|
|
13
|
+
*
|
|
14
|
+
* @param projectId - The project ID.
|
|
15
|
+
* @param envVars - The environment variables to add to the
|
|
16
|
+
* docker-compose.yaml
|
|
17
|
+
* @param passthroughEnabled - Whether to update the passthrough environment
|
|
18
|
+
* variable in the docker-compose.yaml
|
|
19
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
20
|
+
*/
|
|
21
|
+
async function updateEnvVarsAndPassthroughInternal(projectId, envVars, passthroughEnabled = environment_1.ALWAYSAI_ANALYTICS_PASSTHROUGH) {
|
|
22
|
+
if (envVars) {
|
|
23
|
+
await (0, environment_variables_1.setEnvVarsInternal)({ projectId, envVars });
|
|
24
|
+
}
|
|
25
|
+
if (passthroughEnabled) {
|
|
26
|
+
logger_1.logger.debug(`analytics passthrough enabled, updating corresponding application environment variable`);
|
|
27
|
+
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
28
|
+
logger_1.logger.debug(`docker compose contents ${JSON.stringify(composeParsed)}`);
|
|
29
|
+
if (!('services' in composeParsed)) {
|
|
30
|
+
throw new Error(`Docker compose file for ${projectId} has no services!`);
|
|
31
|
+
}
|
|
32
|
+
const composeServices = composeParsed['services'];
|
|
33
|
+
const envVarsToUpdate = {};
|
|
34
|
+
logger_1.logger.debug(`checking docker compose services: ${JSON.stringify(composeServices)}`);
|
|
35
|
+
const services = Object.keys(composeParsed['services']);
|
|
36
|
+
for (const s of services) {
|
|
37
|
+
envVarsToUpdate[s] = {
|
|
38
|
+
[`${constants_1.LOCAL_CONNECTION_PASSTHROUGH_ENV_VAR_NAME}`]: '1'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
logger_1.logger.debug(`new passthrough environment variable environment variables ${envVarsToUpdate}`);
|
|
42
|
+
await (0, environment_variables_1.updateEnvVarsInternal)({ projectId, envVars: envVarsToUpdate });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.updateEnvVarsAndPassthroughInternal = updateEnvVarsAndPassthroughInternal;
|
|
46
|
+
//# sourceMappingURL=environment-variables-and-passthrough-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables-and-passthrough-update.js","sourceRoot":"","sources":["../../src/application-control/environment-variables-and-passthrough-update.ts"],"names":[],"mappings":";;;AACA,gDAAgE;AAChE,6DAA0F;AAC1F,2CAAwC;AACxC,qCAA6C;AAC7C,mEAGiC;AAEjC;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,mCAAmC,CACvD,SAAiB,EACjB,OAA4B,EAC5B,qBAA8B,4CAA8B;IAE5D,IAAI,OAAO,EAAE;QACX,MAAM,IAAA,0CAAkB,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;KAClD;IACD,IAAI,kBAAkB,EAAE;QACtB,eAAM,CAAC,KAAK,CACV,wFAAwF,CACzF,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,IAAA,0BAAiB,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,eAAM,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,mBAAmB,CAAC,CAAC;SAC1E;QACD,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,eAAe,GAAY,EAAE,CAAC;QACpC,eAAM,CAAC,KAAK,CACV,qCAAqC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CACvE,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;YACxB,eAAe,CAAC,CAAC,CAAC,GAAG;gBACnB,CAAC,GAAG,qDAAyC,EAAE,CAAC,EAAE,GAAG;aACtD,CAAC;SACH;QACD,eAAM,CAAC,KAAK,CACV,8DAA8D,eAAe,EAAE,CAChF,CAAC;QACF,MAAM,IAAA,6CAAqB,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;KACtE;AACH,CAAC;AAjCD,kFAiCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables-and-passthrough-update.test.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables-and-passthrough-update.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rimraf_1 = require("rimraf");
|
|
4
|
+
const tempy = require("tempy");
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
const environment_variables_and_passthrough_update_1 = require("./environment-variables-and-passthrough-update");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
jest.mock('./utils');
|
|
9
|
+
describe('Test updateEnvVarsAndPassthroughInternal()', () => {
|
|
10
|
+
const projectId1 = 'test-project';
|
|
11
|
+
let tmpDir;
|
|
12
|
+
const newEnvVars = {
|
|
13
|
+
alwaysai: {
|
|
14
|
+
TEST: '1'
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const newMultiEnvVars = {
|
|
18
|
+
alwaysai: {
|
|
19
|
+
TEST: '1'
|
|
20
|
+
},
|
|
21
|
+
testservice: {
|
|
22
|
+
TEST2: '2'
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const composeParsed = {
|
|
26
|
+
services: {
|
|
27
|
+
alwaysai: {
|
|
28
|
+
build: {
|
|
29
|
+
context: '.',
|
|
30
|
+
dockerfile: 'Dockerfile.standalone',
|
|
31
|
+
args: { ALWAYSAI_HW: 'aarch64' }
|
|
32
|
+
},
|
|
33
|
+
privileged: true,
|
|
34
|
+
volumes: ['/dev:/dev', '~/.config/alwaysai:/root/.config/alwaysai'],
|
|
35
|
+
targetHardware: 'aarch64',
|
|
36
|
+
restart: 'on-failure'
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const composeParsedMultiService = {
|
|
41
|
+
services: {
|
|
42
|
+
alwaysai: {
|
|
43
|
+
build: {
|
|
44
|
+
context: '.',
|
|
45
|
+
dockerfile: 'Dockerfile.standalone',
|
|
46
|
+
args: { ALWAYSAI_HW: 'aarch64' }
|
|
47
|
+
},
|
|
48
|
+
privileged: true,
|
|
49
|
+
volumes: ['/dev:/dev', '~/.config/alwaysai:/root/.config/alwaysai'],
|
|
50
|
+
targetHardware: 'aarch64',
|
|
51
|
+
restart: 'on-failure',
|
|
52
|
+
environment: ['TEST=2']
|
|
53
|
+
},
|
|
54
|
+
testservice: {
|
|
55
|
+
build: {
|
|
56
|
+
context: '.',
|
|
57
|
+
dockerfile: 'Dockerfile.standalone',
|
|
58
|
+
args: { ALWAYSAI_HW: 'aarch64' }
|
|
59
|
+
},
|
|
60
|
+
privileged: true,
|
|
61
|
+
volumes: ['/dev:/dev', '~/.config/alwaysai:/root/.config/alwaysai'],
|
|
62
|
+
targetHardware: 'aarch64',
|
|
63
|
+
restart: 'on-failure'
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
beforeAll(async () => {
|
|
68
|
+
jest.clearAllMocks();
|
|
69
|
+
tmpDir = tempy.directory();
|
|
70
|
+
});
|
|
71
|
+
afterAll(async () => {
|
|
72
|
+
await (0, rimraf_1.rimraf)(tmpDir);
|
|
73
|
+
});
|
|
74
|
+
test('envVars passed in and passthrough enabled, with default docker compose (written by agent)', async () => {
|
|
75
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
76
|
+
await (0, config_1.writeDockerCompose)({
|
|
77
|
+
projectId: projectId1,
|
|
78
|
+
dockerCompose: composeParsed
|
|
79
|
+
});
|
|
80
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, newEnvVars, true);
|
|
81
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
82
|
+
projectId: projectId1
|
|
83
|
+
});
|
|
84
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=1', 'ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
85
|
+
});
|
|
86
|
+
test('envVars passed in and overwrites custom, multi-service docker compose with env vars and passthrough enabled', async () => {
|
|
87
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
88
|
+
await (0, config_1.writeDockerCompose)({
|
|
89
|
+
projectId: projectId1,
|
|
90
|
+
dockerCompose: composeParsedMultiService
|
|
91
|
+
});
|
|
92
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, newEnvVars, true);
|
|
93
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
94
|
+
projectId: projectId1
|
|
95
|
+
});
|
|
96
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=1', 'ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
97
|
+
expect(finalComposedParsed['services']['testservice']['environment']).toStrictEqual(['ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
98
|
+
});
|
|
99
|
+
test('envVars passed in and overwrites custom, multi-service docker compose with env vars for multiple services, and passthrough enabled', async () => {
|
|
100
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
101
|
+
await (0, config_1.writeDockerCompose)({
|
|
102
|
+
projectId: projectId1,
|
|
103
|
+
dockerCompose: composeParsedMultiService
|
|
104
|
+
});
|
|
105
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, newMultiEnvVars, true);
|
|
106
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
107
|
+
projectId: projectId1
|
|
108
|
+
});
|
|
109
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=1', 'ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
110
|
+
expect(finalComposedParsed['services']['testservice']['environment']).toStrictEqual(['TEST2=2', 'ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
111
|
+
});
|
|
112
|
+
test('envVars NOT passed in and passthrough enabled, with default docker compose (written by agent)', async () => {
|
|
113
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
114
|
+
await (0, config_1.writeDockerCompose)({
|
|
115
|
+
projectId: projectId1,
|
|
116
|
+
dockerCompose: composeParsed
|
|
117
|
+
});
|
|
118
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, undefined, true);
|
|
119
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
120
|
+
projectId: projectId1
|
|
121
|
+
});
|
|
122
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
123
|
+
});
|
|
124
|
+
test('envVars NOT passed in and passthrough enabled, with custom, multi-service docker compose', async () => {
|
|
125
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
126
|
+
await (0, config_1.writeDockerCompose)({
|
|
127
|
+
projectId: projectId1,
|
|
128
|
+
dockerCompose: composeParsedMultiService
|
|
129
|
+
});
|
|
130
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, undefined, true);
|
|
131
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
132
|
+
projectId: projectId1
|
|
133
|
+
});
|
|
134
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=2', 'ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
135
|
+
expect(finalComposedParsed['services']['testservice']['environment']).toStrictEqual(['ALWAYSAI_CONNECT_TO_DEVICE_AGENT=1']);
|
|
136
|
+
});
|
|
137
|
+
test('envVars passed in and passthrough DISABLED, with default docker compose (written by agent)', async () => {
|
|
138
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
139
|
+
await (0, config_1.writeDockerCompose)({
|
|
140
|
+
projectId: projectId1,
|
|
141
|
+
dockerCompose: composeParsed
|
|
142
|
+
});
|
|
143
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, newEnvVars, false);
|
|
144
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
145
|
+
projectId: projectId1
|
|
146
|
+
});
|
|
147
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=1']);
|
|
148
|
+
});
|
|
149
|
+
test('envVars passed in and passthrough DISABLED, with custom, multi-service docker compose', async () => {
|
|
150
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
151
|
+
await (0, config_1.writeDockerCompose)({
|
|
152
|
+
projectId: projectId1,
|
|
153
|
+
dockerCompose: composeParsedMultiService
|
|
154
|
+
});
|
|
155
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, newEnvVars, false);
|
|
156
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
157
|
+
projectId: projectId1
|
|
158
|
+
});
|
|
159
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=1']);
|
|
160
|
+
expect(finalComposedParsed['services']['testservice']['environment']).toStrictEqual(undefined);
|
|
161
|
+
});
|
|
162
|
+
test('envVars NOT passed in and passthrough DISABLED, with default docker compose (written by agent)', async () => {
|
|
163
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
164
|
+
await (0, config_1.writeDockerCompose)({
|
|
165
|
+
projectId: projectId1,
|
|
166
|
+
dockerCompose: composeParsed
|
|
167
|
+
});
|
|
168
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, undefined, false);
|
|
169
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
170
|
+
projectId: projectId1
|
|
171
|
+
});
|
|
172
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(undefined);
|
|
173
|
+
});
|
|
174
|
+
test('envVars NOT passed in and passthrough DISABLED, with custom, multi-service docker compose', async () => {
|
|
175
|
+
jest.mocked(utils_1.getAppDir).mockReturnValue(tmpDir);
|
|
176
|
+
await (0, config_1.writeDockerCompose)({
|
|
177
|
+
projectId: projectId1,
|
|
178
|
+
dockerCompose: composeParsedMultiService
|
|
179
|
+
});
|
|
180
|
+
await (0, environment_variables_and_passthrough_update_1.updateEnvVarsAndPassthroughInternal)(projectId1, undefined, false);
|
|
181
|
+
const finalComposedParsed = await (0, config_1.readDockerCompose)({
|
|
182
|
+
projectId: projectId1
|
|
183
|
+
});
|
|
184
|
+
expect(finalComposedParsed['services']['alwaysai']['environment']).toStrictEqual(['TEST=2']);
|
|
185
|
+
expect(finalComposedParsed['services']['testservice']['environment']).toStrictEqual(undefined);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=environment-variables-and-passthrough-update.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-variables-and-passthrough-update.test.js","sourceRoot":"","sources":["../../src/application-control/environment-variables-and-passthrough-update.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,74 @@
|
|
|
1
1
|
import { EnvVars } from '@alwaysai/device-agent-schemas';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Overrides the current environment variables specified in the
|
|
4
|
+
* docker-compose.yaml file.
|
|
5
|
+
*
|
|
6
|
+
* @param props.projectId - The project ID.
|
|
7
|
+
* @param props.envVars - The environment variables to override the
|
|
8
|
+
* ones currently in docker-compose.yaml
|
|
9
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
10
|
+
*/
|
|
11
|
+
export declare function setEnvVars(props: {
|
|
3
12
|
projectId: string;
|
|
4
13
|
envVars: EnvVars;
|
|
5
14
|
}): Promise<void>;
|
|
6
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Overrides the current environment variables specified in the
|
|
17
|
+
* docker-compose.yaml file. Intended for internal use only, as
|
|
18
|
+
* it does not check if there is an installation in progress
|
|
19
|
+
* before proceeding with the environment variable update.
|
|
20
|
+
*
|
|
21
|
+
* @param props.projectId - The project ID.
|
|
22
|
+
* @param props.envVars - The environment variables to override the
|
|
23
|
+
* ones currently in docker-compose.yaml
|
|
24
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
25
|
+
*/
|
|
26
|
+
export declare function setEnvVarsInternal(props: {
|
|
7
27
|
projectId: string;
|
|
8
28
|
envVars: EnvVars;
|
|
9
29
|
}): Promise<void>;
|
|
10
|
-
|
|
11
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Converts a string array of environment variables into an iterable object,
|
|
32
|
+
* where each string is converted to a key-value pair.
|
|
33
|
+
*
|
|
34
|
+
* @param stringEnvs - Environment variables in the format of
|
|
35
|
+
* ['<variableName>=<variableValue>', '<variableName>=<variableValue>']
|
|
36
|
+
* @returns The variables as an object, as key-value pairs
|
|
37
|
+
*/
|
|
38
|
+
export declare function convertStringEnvsToKeyVal(stringEnvs: string[]): any;
|
|
39
|
+
/**
|
|
40
|
+
* Returns all environment variables for all services currently set
|
|
41
|
+
* in the docker-compose.yaml file.
|
|
42
|
+
*
|
|
43
|
+
* @param props.projectId - The project ID
|
|
44
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
45
|
+
*/
|
|
46
|
+
export declare function getAllEnvVars(props: {
|
|
12
47
|
projectId: string;
|
|
13
48
|
}): Promise<EnvVars>;
|
|
49
|
+
/**
|
|
50
|
+
* Returns all environment variables for all services currently set
|
|
51
|
+
* in the docker-compose.yaml file. Intended for internal use only, as
|
|
52
|
+
* it does not check if there is an installation in progress
|
|
53
|
+
* before proceeding with the environment variable lookup.
|
|
54
|
+
*
|
|
55
|
+
* @param props.projectId - The project ID
|
|
56
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
57
|
+
*/
|
|
58
|
+
export declare function getAllEnvVarsInternal(props: {
|
|
59
|
+
projectId: string;
|
|
60
|
+
}): Promise<EnvVars>;
|
|
61
|
+
/**
|
|
62
|
+
* Adds new environment variables to the existing ones in the
|
|
63
|
+
* docker-compose.yaml file.
|
|
64
|
+
*
|
|
65
|
+
* @param props.projectId - The project ID.
|
|
66
|
+
* @param props.envVars - The environment variables to add to the
|
|
67
|
+
* docker-compose.yaml
|
|
68
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
69
|
+
*/
|
|
70
|
+
export declare function updateEnvVarsInternal(props: {
|
|
71
|
+
projectId: string;
|
|
72
|
+
envVars: EnvVars;
|
|
73
|
+
}): Promise<void>;
|
|
14
74
|
//# sourceMappingURL=environment-variables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAQzD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAOnE;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAInB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhB"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.updateEnvVarsInternal = exports.getAllEnvVarsInternal = exports.getAllEnvVars = exports.convertStringEnvsToKeyVal = exports.setEnvVarsInternal = exports.setEnvVars = void 0;
|
|
4
4
|
const util_1 = require("alwaysai/lib/util");
|
|
5
|
-
const config_1 = require("./config");
|
|
6
|
-
const utils_1 = require("./utils");
|
|
7
|
-
const logger_1 = require("../util/logger");
|
|
8
5
|
const agent_config_1 = require("../infrastructure/agent-config");
|
|
6
|
+
const logger_1 = require("../util/logger");
|
|
7
|
+
const config_1 = require("./config");
|
|
9
8
|
const status_1 = require("./status");
|
|
10
|
-
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
/**
|
|
11
|
+
* Overrides the current environment variables specified in the
|
|
12
|
+
* docker-compose.yaml file.
|
|
13
|
+
*
|
|
14
|
+
* @param props.projectId - The project ID.
|
|
15
|
+
* @param props.envVars - The environment variables to override the
|
|
16
|
+
* ones currently in docker-compose.yaml
|
|
17
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
18
|
+
*/
|
|
19
|
+
async function setEnvVars(props) {
|
|
11
20
|
const { projectId, envVars } = props;
|
|
12
21
|
const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
|
|
13
22
|
projectId
|
|
@@ -16,7 +25,7 @@ async function setEnv(props) {
|
|
|
16
25
|
projectId,
|
|
17
26
|
version: appReleaseHash
|
|
18
27
|
});
|
|
19
|
-
await
|
|
28
|
+
await setEnvVarsInternal({ projectId, envVars });
|
|
20
29
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
21
30
|
await (0, utils_1.buildApp)({ appDir });
|
|
22
31
|
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
@@ -28,8 +37,19 @@ async function setEnv(props) {
|
|
|
28
37
|
}
|
|
29
38
|
logger_1.logger.info(`Updated environment variables for ${projectId}: ${JSON.stringify(envVars, null, 2)}`);
|
|
30
39
|
}
|
|
31
|
-
exports.
|
|
32
|
-
|
|
40
|
+
exports.setEnvVars = setEnvVars;
|
|
41
|
+
/**
|
|
42
|
+
* Overrides the current environment variables specified in the
|
|
43
|
+
* docker-compose.yaml file. Intended for internal use only, as
|
|
44
|
+
* it does not check if there is an installation in progress
|
|
45
|
+
* before proceeding with the environment variable update.
|
|
46
|
+
*
|
|
47
|
+
* @param props.projectId - The project ID.
|
|
48
|
+
* @param props.envVars - The environment variables to override the
|
|
49
|
+
* ones currently in docker-compose.yaml
|
|
50
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
51
|
+
*/
|
|
52
|
+
async function setEnvVarsInternal(props) {
|
|
33
53
|
const { projectId, envVars } = props;
|
|
34
54
|
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
35
55
|
if (!('services' in composeParsed)) {
|
|
@@ -51,7 +71,15 @@ async function setEnvInternal(props) {
|
|
|
51
71
|
});
|
|
52
72
|
await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
|
|
53
73
|
}
|
|
54
|
-
exports.
|
|
74
|
+
exports.setEnvVarsInternal = setEnvVarsInternal;
|
|
75
|
+
/**
|
|
76
|
+
* Converts a string array of environment variables into an iterable object,
|
|
77
|
+
* where each string is converted to a key-value pair.
|
|
78
|
+
*
|
|
79
|
+
* @param stringEnvs - Environment variables in the format of
|
|
80
|
+
* ['<variableName>=<variableValue>', '<variableName>=<variableValue>']
|
|
81
|
+
* @returns The variables as an object, as key-value pairs
|
|
82
|
+
*/
|
|
55
83
|
function convertStringEnvsToKeyVal(stringEnvs) {
|
|
56
84
|
const envVars = {};
|
|
57
85
|
stringEnvs.forEach((env) => {
|
|
@@ -61,9 +89,30 @@ function convertStringEnvsToKeyVal(stringEnvs) {
|
|
|
61
89
|
return envVars;
|
|
62
90
|
}
|
|
63
91
|
exports.convertStringEnvsToKeyVal = convertStringEnvsToKeyVal;
|
|
64
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Returns all environment variables for all services currently set
|
|
94
|
+
* in the docker-compose.yaml file.
|
|
95
|
+
*
|
|
96
|
+
* @param props.projectId - The project ID
|
|
97
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
98
|
+
*/
|
|
99
|
+
async function getAllEnvVars(props) {
|
|
65
100
|
const { projectId } = props;
|
|
66
101
|
await (0, utils_1.requireAppReady)({ projectId });
|
|
102
|
+
return getAllEnvVarsInternal(props);
|
|
103
|
+
}
|
|
104
|
+
exports.getAllEnvVars = getAllEnvVars;
|
|
105
|
+
/**
|
|
106
|
+
* Returns all environment variables for all services currently set
|
|
107
|
+
* in the docker-compose.yaml file. Intended for internal use only, as
|
|
108
|
+
* it does not check if there is an installation in progress
|
|
109
|
+
* before proceeding with the environment variable lookup.
|
|
110
|
+
*
|
|
111
|
+
* @param props.projectId - The project ID
|
|
112
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
113
|
+
*/
|
|
114
|
+
async function getAllEnvVarsInternal(props) {
|
|
115
|
+
const { projectId } = props;
|
|
67
116
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
68
117
|
const spawner = (0, util_1.JsSpawner)({ path: appDir });
|
|
69
118
|
const envVars = {};
|
|
@@ -99,5 +148,31 @@ async function getAllEnvs(props) {
|
|
|
99
148
|
}
|
|
100
149
|
return envVars;
|
|
101
150
|
}
|
|
102
|
-
exports.
|
|
151
|
+
exports.getAllEnvVarsInternal = getAllEnvVarsInternal;
|
|
152
|
+
/**
|
|
153
|
+
* Adds new environment variables to the existing ones in the
|
|
154
|
+
* docker-compose.yaml file.
|
|
155
|
+
*
|
|
156
|
+
* @param props.projectId - The project ID.
|
|
157
|
+
* @param props.envVars - The environment variables to add to the
|
|
158
|
+
* docker-compose.yaml
|
|
159
|
+
* @raises When called if there are no services in a docker-compose.yaml file
|
|
160
|
+
*/
|
|
161
|
+
async function updateEnvVarsInternal(props) {
|
|
162
|
+
const { projectId, envVars } = props;
|
|
163
|
+
const outputEnvVars = await getAllEnvVarsInternal({ projectId });
|
|
164
|
+
Object.keys(envVars).forEach((service) => {
|
|
165
|
+
if (service in outputEnvVars) {
|
|
166
|
+
// Merge and update existing env vars with new ones
|
|
167
|
+
outputEnvVars[service] = Object.assign(Object.assign({}, outputEnvVars[service]), envVars[service]);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// Set env vars to new ones for service
|
|
171
|
+
outputEnvVars[service] = envVars[service];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
logger_1.logger.debug(`applying envVarUpdate: ${JSON.stringify(outputEnvVars)}`);
|
|
175
|
+
await setEnvVarsInternal({ projectId, envVars: outputEnvVars });
|
|
176
|
+
}
|
|
177
|
+
exports.updateEnvVarsInternal = updateEnvVarsInternal;
|
|
103
178
|
//# sourceMappingURL=environment-variables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
|