Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
d76d1a263b | |||
5f6f434998 | |||
8e7909e367 | |||
ff9302f745 | |||
3577fa22e1 | |||
f5275adfbd | |||
31bf1b27a4 | |||
a77def5844 | |||
2357699f3e | |||
01f5784488 | |||
80f35c39aa | |||
87f55773bd |
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/qenv",
|
||||
"version": "3.0.4",
|
||||
"version": "4.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@pushrocks/qenv",
|
||||
"version": "3.0.4",
|
||||
"version": "4.0.0",
|
||||
"private": false,
|
||||
"description": "easy promised environments",
|
||||
"main": "dist/index.js",
|
||||
|
16
test/test.ts
16
test/test.ts
@ -4,28 +4,30 @@ import * as qenv from '../ts/index';
|
||||
|
||||
process.env['key1'] = 'original';
|
||||
|
||||
let qenvTestObject: qenv.Qenv;
|
||||
let testQenv: qenv.Qenv;
|
||||
|
||||
tap.test('should create a new class', async () => {
|
||||
qenvTestObject = new qenv.Qenv(
|
||||
testQenv = new qenv.Qenv(
|
||||
path.join(__dirname, 'assets'),
|
||||
path.join(__dirname, 'assets'),
|
||||
false
|
||||
);
|
||||
expect(qenvTestObject).to.be.instanceof(qenv.Qenv);
|
||||
expect(testQenv).to.be.instanceof(qenv.Qenv);
|
||||
});
|
||||
|
||||
tap.test('key1 should be not be overwritten since it is already present', async () => {
|
||||
expect(process.env.key1).to.equal('original');
|
||||
expect(testQenv.getEnvVarRequired('key1')).to.equal('original');
|
||||
expect(testQenv.getEnvVarOnDemand('key1')).to.equal('original');
|
||||
});
|
||||
|
||||
tap.test('key2 should be read from Yml', async () => {
|
||||
expect(process.env.key2).to.equal('fromYml');
|
||||
expect(testQenv.getEnvVarRequired('key2')).to.equal('fromYml');
|
||||
expect(testQenv.getEnvVarOnDemand('key2')).to.equal('fromYml');
|
||||
});
|
||||
|
||||
tap.test('keyValueObjectArray should hold all retrieved values', async () => {
|
||||
expect(qenvTestObject.keyValueObjectArray[0].value).to.equal('original');
|
||||
expect(qenvTestObject.keyValueObjectArray[1].value).to.equal('fromYml');
|
||||
expect(testQenv.keyValueObject.key1).to.equal('original');
|
||||
expect(testQenv.keyValueObject.key2).to.equal('fromYml');
|
||||
});
|
||||
|
||||
tap.start();
|
||||
|
@ -1,9 +1,5 @@
|
||||
import * as plugins from './qenv.plugins';
|
||||
|
||||
export interface IKeyValueObject {
|
||||
key: string;
|
||||
value: string;
|
||||
}
|
||||
plugins.smartlog.defaultLogger.enableConsole();
|
||||
|
||||
/**
|
||||
* class Qenv
|
||||
@ -13,7 +9,7 @@ export class Qenv {
|
||||
public requiredEnvVars: string[] = [];
|
||||
public availableEnvVars: string[] = [];
|
||||
public missingEnvVars: string[] = [];
|
||||
public keyValueObjectArray: IKeyValueObject[] = [];
|
||||
public keyValueObject: {[key: string]: any } = {};
|
||||
public logger: plugins.smartlog.Smartlog;
|
||||
|
||||
// filePaths
|
||||
@ -61,7 +57,7 @@ export class Qenv {
|
||||
* @param envVarName
|
||||
*/
|
||||
public getEnvVarRequired(envVarName): string {
|
||||
return process.env[envVarName];
|
||||
return this.keyValueObject[envVarName];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -74,7 +70,6 @@ export class Qenv {
|
||||
try {
|
||||
envYml = plugins.smartfile.fs.toObjectSync(this.envFilePathAbsolute);
|
||||
} catch (err) {
|
||||
console.log("env file couldn't be found at " + this.envFilePathAbsolute);
|
||||
envYml = {};
|
||||
}
|
||||
let envVar: string;
|
||||
@ -106,11 +101,15 @@ export class Qenv {
|
||||
// docker secret.json
|
||||
if (
|
||||
plugins.smartfile.fs.isDirectory('/run') &&
|
||||
plugins.smartfile.fs.isDirectory('/run/secrets') &&
|
||||
plugins.smartfile.fs.fileExistsSync(`/run/secrets/secret.json`)
|
||||
plugins.smartfile.fs.isDirectory('/run/secrets')
|
||||
) {
|
||||
const secretObject = plugins.smartfile.fs.toObjectSync('/run/secrets/secret.json');
|
||||
dockerSecret = secretObject[requiredEnvVar];
|
||||
const availableSecrets = plugins.smartfile.fs.listAllItemsSync('/run/secrets');
|
||||
for (const secret of availableSecrets) {
|
||||
if (secret.includes('secret.json') && !dockerSecret) {
|
||||
const secretObject = plugins.smartfile.fs.toObjectSync(`/run/secrets/${secret}`);
|
||||
dockerSecret = secretObject[requiredEnvVar];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// warn if there is more than one candidate
|
||||
@ -129,12 +128,16 @@ export class Qenv {
|
||||
|
||||
let chosenVar: string = null;
|
||||
if (envVar) {
|
||||
this.logger.log('ok', `found ${requiredEnvVar} as environment variable`);
|
||||
chosenVar = envVar;
|
||||
} else if (envFileVar) {
|
||||
this.logger.log('ok', `found ${requiredEnvVar} as env.yml variable`);
|
||||
chosenVar = envFileVar;
|
||||
} else if (dockerSecret) {
|
||||
this.logger.log('ok', `found ${requiredEnvVar} as docker secret`);
|
||||
chosenVar = dockerSecret;
|
||||
} else if (dockerSecretJson) {
|
||||
this.logger.log('ok', `found ${requiredEnvVar} as docker secret.json`);
|
||||
chosenVar = dockerSecretJson;
|
||||
}
|
||||
return chosenVar;
|
||||
@ -165,14 +168,10 @@ export class Qenv {
|
||||
const chosenVar = this.getEnvVarOnDemand(requiredEnvVar);
|
||||
if (chosenVar) {
|
||||
this.availableEnvVars.push(requiredEnvVar);
|
||||
process.env[requiredEnvVar] = chosenVar;
|
||||
this.keyValueObjectArray.push({
|
||||
key: requiredEnvVar,
|
||||
value: chosenVar
|
||||
});
|
||||
this.keyValueObject[requiredEnvVar] = chosenVar;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* gets missing env vars
|
||||
|
Reference in New Issue
Block a user