Skip to content
This repository was archived by the owner on Nov 23, 2022. It is now read-only.

Commit bac439b

Browse files
committed
refactor(util): extract getHost and getEnv utils
1 parent d7786d7 commit bac439b

File tree

2 files changed

+41
-31
lines changed

2 files changed

+41
-31
lines changed

src/docker/start.js

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
// our modules
22
const docker = require('./docker');
33
const {initNetwork, createNetwork} = require('../docker/network');
4-
const {getProjectConfig, nameFromImage, projectFromConfig, writeStatus} = require('../util');
5-
const {getSecretsCollection} = require('../db/secrets');
4+
const {getProjectConfig, nameFromImage, projectFromConfig, writeStatus, getHost, getEnv} = require('../util');
65
const {getConfig} = require('../config');
76
const {getPlugins} = require('../plugins');
87
const logger = require('../logger');
98

10-
// try to find secret with current value name and return secret value if present
11-
const valueOrSecret = (value, secrets) => {
12-
const secret = secrets.find(s => `@${s.name}` === value);
13-
if (secret) {
14-
return secret.value;
15-
}
16-
return value;
17-
};
18-
199
exports.startFromParams = async ({
2010
image,
2111
deploymentName,
@@ -166,29 +156,13 @@ exports.start = async ({image, username, folder, resultStream, existing = []}) =
166156
// get project info
167157
const config = getProjectConfig(folder);
168158

169-
// generate host
170-
// construct base domain from config, prepend with "." if it's not there
171-
const baseDomain = serverConfig.baseDomain ? serverConfig.baseDomain.replace(/^(\.?)/, '.') : undefined;
172-
// construc default domain using given base domain
173-
const defaultDomain = baseDomain ? `${name}${baseDomain}` : undefined;
174-
// construct host
175-
const host = config.domain === undefined ? defaultDomain : config.domain;
176159
// generate project name
177160
const project = projectFromConfig({username, config});
178161

179-
// replace env vars values with secrets if needed
180-
const secrets = getSecretsCollection().find({user: username});
181-
// generate env vars (with secrets)
182-
const userEnv = config.env
183-
? Object.keys(config.env).map(key => `${key}=${valueOrSecret(config.env[key], secrets)}`)
184-
: [];
185-
const exoEnv = [
186-
`EXOFRAME_DEPLOYMENT=${name}`,
187-
`EXOFRAME_USER=${username}`,
188-
`EXOFRAME_PROJECT=${project}`,
189-
`EXOFRAME_HOST=${host}`,
190-
];
191-
const Env = userEnv.concat(exoEnv);
162+
// generate host
163+
const host = getHost({serverConfig, name, config});
164+
165+
const Env = getEnv({username, config, name, project, host}).map((pair) => pair.join('='));
192166

193167
// construct restart policy
194168
let RestartPolicy = {};

src/util/index.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,20 @@ const {spawn} = require('child_process');
66
const tar = require('tar-fs');
77
const rimraf = require('rimraf');
88
const uuid = require('uuid');
9+
const {getSecretsCollection} = require('../db/secrets');
910

1011
// our modules
1112
const {tempDockerDir: tempDir} = require('../config');
1213

14+
// try to find secret with current value name and return secret value if present
15+
const valueOrSecret = (value, secrets) => {
16+
const secret = secrets.find(s => `@${s.name}` === value);
17+
if (secret) {
18+
return secret.value;
19+
}
20+
return value;
21+
};
22+
1323
// cleanup temp folder
1424
exports.cleanTemp = folder => new Promise(resolve => rimraf(path.join(tempDir, folder), resolve));
1525

@@ -81,3 +91,29 @@ exports.compareNames = (nameOne = '', nameTwo = '') => {
8191
const nameTwoClean = nameTwoParts.slice(0, nameTwoParts.length - 2).join('-');
8292
return nameOneClean === nameTwoClean;
8393
};
94+
95+
exports.getHost = ({serverConfig, name, config}) => {
96+
// construct base domain from config, prepend with "." if it's not there
97+
const baseDomain = serverConfig.baseDomain ? serverConfig.baseDomain.replace(/^(\.?)/, '.') : undefined;
98+
// construct default domain using given base domain
99+
const defaultDomain = baseDomain ? `${name}${baseDomain}` : undefined;
100+
// construct host
101+
const host = config.domain === undefined ? defaultDomain : config.domain;
102+
return host;
103+
};
104+
105+
exports.getEnv = ({username, config, name, host, project = config.project || name}) => {
106+
// replace env vars values with secrets if needed
107+
const secrets = getSecretsCollection().find({ user: username });
108+
// generate env vars (with secrets)
109+
const userEnv = config.env
110+
? Object.entries(config.env).map(([key, value]) => [key, valueOrSecret(value, secrets)])
111+
: [];
112+
return [
113+
...userEnv,
114+
['EXOFRAME_DEPLOYMENT', name],
115+
['EXOFRAME_USER', username],
116+
['EXOFRAME_PROJECT', project],
117+
['EXOFRAME_HOST', host],
118+
];
119+
};

0 commit comments

Comments
 (0)