navy 4.1.2-rc.2 → 5.0.0
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/cli/config/index.js +57 -241
- package/lib/cli/config/wrapper.js +12 -36
- package/lib/cli/develop.js +63 -167
- package/lib/cli/doctor/clean-compose-files.js +19 -73
- package/lib/cli/doctor/index.js +34 -154
- package/lib/cli/doctor/invalid-compose-config.js +20 -110
- package/lib/cli/doctor/invalid-state.js +22 -115
- package/lib/cli/doctor/util.js +26 -93
- package/lib/cli/external-ip.js +9 -39
- package/lib/cli/health.js +18 -67
- package/lib/cli/https.js +92 -0
- package/lib/cli/import.js +22 -59
- package/lib/cli/index.js +11 -17
- package/lib/cli/lan-ip.js +18 -60
- package/lib/cli/launch.js +46 -127
- package/lib/cli/live.js +37 -111
- package/lib/cli/local-ip.js +16 -53
- package/lib/cli/logs.js +7 -35
- package/lib/cli/open.js +11 -45
- package/lib/cli/program.js +145 -167
- package/lib/cli/ps.js +36 -105
- package/lib/cli/refresh-config.js +18 -62
- package/lib/cli/run.js +8 -39
- package/lib/cli/status.js +41 -201
- package/lib/cli/updates.js +68 -160
- package/lib/cli/util/get-or-initialise-navy.js +14 -57
- package/lib/cli/util/import.js +33 -83
- package/lib/cli/util/index.js +10 -12
- package/lib/cli/util/reconfigure.js +12 -102
- package/lib/cli/wait-for-healthy.js +53 -100
- package/lib/config-provider.js +25 -127
- package/lib/config-providers/filesystem/index.js +58 -235
- package/lib/config-providers/npm/__tests__/util.js +3 -6
- package/lib/config-providers/npm/index.js +60 -231
- package/lib/config-providers/npm/util.js +6 -9
- package/lib/config.js +39 -76
- package/lib/driver-logging.js +23 -28
- package/lib/driver.js +5 -7
- package/lib/drivers/docker-compose/client.js +64 -172
- package/lib/drivers/docker-compose/index.js +153 -464
- package/lib/errors.js +27 -61
- package/lib/http-proxy.js +72 -158
- package/lib/index.js +26 -29
- package/lib/middleware/add-service-proxy-config.js +76 -0
- package/lib/middleware/develop.js +9 -23
- package/lib/middleware/helpers.js +20 -25
- package/lib/middleware/port-override.js +15 -37
- package/lib/middleware/set-env-vars.js +14 -18
- package/lib/middleware/set-image.js +12 -18
- package/lib/middleware/set-logging-driver.js +14 -18
- package/lib/middleware/tag-override.js +11 -19
- package/lib/navy/default-middleware.js +13 -27
- package/lib/navy/index.js +438 -1761
- package/lib/navy/middleware.js +15 -100
- package/lib/navy/plugin-interface.js +28 -108
- package/lib/navy/state.js +58 -147
- package/lib/navy/util.js +2 -1
- package/lib/service.js +5 -3
- package/lib/util/__tests__/external-ip.js +20 -96
- package/lib/util/__tests__/registry-client.js +11 -24
- package/lib/util/__tests__/service-host.js +19 -116
- package/lib/util/docker-client.js +10 -13
- package/lib/util/exec-async.js +9 -27
- package/lib/util/external-ip.js +48 -126
- package/lib/util/fs.js +7 -6
- package/lib/util/get-lan-ip.js +15 -52
- package/lib/util/has-update.js +23 -73
- package/lib/util/https.js +213 -0
- package/lib/util/navyrc.js +12 -50
- package/lib/util/registry-client.js +41 -112
- package/lib/util/service-host.js +40 -129
- package/lib/util/table.js +11 -21
- package/package.json +14 -14
- package/LICENSE +0 -21
- package/lib/middleware/add-virtual-hosts.js +0 -147
|
@@ -1,507 +1,196 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
4
|
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
|
-
|
|
7
|
-
var _promise = require('babel-runtime/core-js/promise');
|
|
8
|
-
|
|
9
|
-
var _promise2 = _interopRequireDefault(_promise);
|
|
10
|
-
|
|
11
|
-
var _regenerator = require('babel-runtime/regenerator');
|
|
12
|
-
|
|
13
|
-
var _regenerator2 = _interopRequireDefault(_regenerator);
|
|
14
|
-
|
|
15
|
-
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
|
16
|
-
|
|
17
|
-
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
|
18
|
-
|
|
19
|
-
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
|
20
|
-
|
|
21
|
-
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
|
22
|
-
|
|
23
|
-
var _keys = require('babel-runtime/core-js/object/keys');
|
|
24
|
-
|
|
25
|
-
var _keys2 = _interopRequireDefault(_keys);
|
|
26
|
-
|
|
27
8
|
exports.default = createDockerComposeDriver;
|
|
28
9
|
|
|
29
|
-
var _jsYaml = require(
|
|
10
|
+
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
30
11
|
|
|
31
|
-
var
|
|
12
|
+
var _fs = _interopRequireDefault(require("../../util/fs"));
|
|
32
13
|
|
|
33
|
-
var
|
|
14
|
+
var _dockerClient = _interopRequireDefault(require("../../util/docker-client"));
|
|
34
15
|
|
|
35
|
-
var
|
|
16
|
+
var _client = require("./client");
|
|
36
17
|
|
|
37
|
-
var
|
|
18
|
+
var _service = require("../../service");
|
|
38
19
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
var _client = require('./client');
|
|
42
|
-
|
|
43
|
-
var _service = require('../../service');
|
|
44
|
-
|
|
45
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
46
|
-
|
|
47
|
-
var debug = require('debug')('navy:docker-compose');
|
|
20
|
+
const debug = require('debug')('navy:docker-compose');
|
|
48
21
|
|
|
49
22
|
function getArgsFromOptions(opts, argMap) {
|
|
50
|
-
return
|
|
51
|
-
return argMap[key];
|
|
52
|
-
}).filter(function (arg) {
|
|
53
|
-
return arg;
|
|
54
|
-
});
|
|
23
|
+
return Object.keys(opts).map(key => argMap[key]).filter(arg => arg);
|
|
55
24
|
}
|
|
56
25
|
|
|
57
|
-
|
|
26
|
+
const launchArgMap = {
|
|
58
27
|
noDeps: '--no-deps',
|
|
59
28
|
forceRecreate: '--force-recreate'
|
|
60
29
|
};
|
|
61
30
|
|
|
62
31
|
function createDockerComposeDriver(navy) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (opts) {
|
|
84
|
-
additionalArgs.push.apply(additionalArgs, (0, _toConsumableArray3.default)(getArgsFromOptions(opts, launchArgMap)));
|
|
85
|
-
debug('Resolve opts to args', additionalArgs);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (!services) {
|
|
89
|
-
services = [];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
_context.next = 6;
|
|
93
|
-
return exec('up', ['-d'].concat(additionalArgs, (0, _toConsumableArray3.default)(services)));
|
|
94
|
-
|
|
95
|
-
case 6:
|
|
96
|
-
case 'end':
|
|
97
|
-
return _context.stop();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}, _callee, _this);
|
|
101
|
-
}))();
|
|
32
|
+
const {
|
|
33
|
+
exec,
|
|
34
|
+
getCompiledDockerComposePath
|
|
35
|
+
} = (0, _client.createComposeClient)(navy);
|
|
36
|
+
const driver = {
|
|
37
|
+
async launch(services, opts = {}) {
|
|
38
|
+
const additionalArgs = [];
|
|
39
|
+
debug('Got launch', services, opts);
|
|
40
|
+
|
|
41
|
+
if (opts) {
|
|
42
|
+
additionalArgs.push(...getArgsFromOptions(opts, launchArgMap));
|
|
43
|
+
debug('Resolve opts to args', additionalArgs);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!services) {
|
|
47
|
+
services = [];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await exec('up', ['-d', ...additionalArgs, ...services]);
|
|
102
51
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return _regenerator2.default.wrap(function _callee2$(_context2) {
|
|
108
|
-
while (1) {
|
|
109
|
-
switch (_context2.prev = _context2.next) {
|
|
110
|
-
case 0:
|
|
111
|
-
_context2.next = 2;
|
|
112
|
-
return exec('kill');
|
|
113
|
-
|
|
114
|
-
case 2:
|
|
115
|
-
_context2.next = 4;
|
|
116
|
-
return exec('down', ['-v']);
|
|
117
|
-
|
|
118
|
-
case 4:
|
|
119
|
-
case 'end':
|
|
120
|
-
return _context2.stop();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}, _callee2, _this2);
|
|
124
|
-
}))();
|
|
52
|
+
|
|
53
|
+
async destroy() {
|
|
54
|
+
await exec('kill');
|
|
55
|
+
await exec('down', ['-v']);
|
|
125
56
|
},
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
case 5:
|
|
151
|
-
ps = _context3.sent;
|
|
152
|
-
_context3.next = 8;
|
|
153
|
-
return _promise2.default.all(ps.map(function (container) {
|
|
154
|
-
return _dockerClient2.default.getContainer(container.Id).inspect();
|
|
155
|
-
}));
|
|
156
|
-
|
|
157
|
-
case 8:
|
|
158
|
-
inspect = _context3.sent;
|
|
159
|
-
return _context3.abrupt('return', inspect.map(function (service) {
|
|
160
|
-
return {
|
|
161
|
-
id: service.Id,
|
|
162
|
-
name: service.Config.Labels['com.docker.compose.service'],
|
|
163
|
-
image: service.Config.Image,
|
|
164
|
-
status: service.State.Running === true ? _service.Status.RUNNING : _service.Status.EXITED,
|
|
165
|
-
raw: service
|
|
166
|
-
};
|
|
167
|
-
}));
|
|
168
|
-
|
|
169
|
-
case 10:
|
|
170
|
-
case 'end':
|
|
171
|
-
return _context3.stop();
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}, _callee3, _this3);
|
|
175
|
-
}))();
|
|
57
|
+
|
|
58
|
+
async ps(service) {
|
|
59
|
+
const projectName = navy.normalisedName;
|
|
60
|
+
const psOptions = {
|
|
61
|
+
all: true,
|
|
62
|
+
filters: {
|
|
63
|
+
label: [`com.docker.compose.project=${projectName}`]
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
if (service) {
|
|
68
|
+
psOptions.filters.label.push(`com.docker.compose.service=${service}`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const ps = await _dockerClient.default.listContainers(psOptions);
|
|
72
|
+
const inspect = await Promise.all(ps.map(container => _dockerClient.default.getContainer(container.Id).inspect()));
|
|
73
|
+
return inspect.map(service => ({
|
|
74
|
+
id: service.Id,
|
|
75
|
+
name: service.Config.Labels['com.docker.compose.service'],
|
|
76
|
+
image: service.Config.Image,
|
|
77
|
+
status: service.State.Running === true ? _service.Status.RUNNING : _service.Status.EXITED,
|
|
78
|
+
raw: service
|
|
79
|
+
}));
|
|
176
80
|
},
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
|
|
181
|
-
return _regenerator2.default.wrap(function _callee4$(_context4) {
|
|
182
|
-
while (1) {
|
|
183
|
-
switch (_context4.prev = _context4.next) {
|
|
184
|
-
case 0:
|
|
185
|
-
_context4.next = 2;
|
|
186
|
-
return exec('start', services);
|
|
187
|
-
|
|
188
|
-
case 2:
|
|
189
|
-
case 'end':
|
|
190
|
-
return _context4.stop();
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}, _callee4, _this4);
|
|
194
|
-
}))();
|
|
81
|
+
|
|
82
|
+
async start(services) {
|
|
83
|
+
await exec('start', services);
|
|
195
84
|
},
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5() {
|
|
200
|
-
return _regenerator2.default.wrap(function _callee5$(_context5) {
|
|
201
|
-
while (1) {
|
|
202
|
-
switch (_context5.prev = _context5.next) {
|
|
203
|
-
case 0:
|
|
204
|
-
_context5.next = 2;
|
|
205
|
-
return exec('stop', services);
|
|
206
|
-
|
|
207
|
-
case 2:
|
|
208
|
-
case 'end':
|
|
209
|
-
return _context5.stop();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}, _callee5, _this5);
|
|
213
|
-
}))();
|
|
85
|
+
|
|
86
|
+
async stop(services) {
|
|
87
|
+
await exec('stop', services);
|
|
214
88
|
},
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6() {
|
|
219
|
-
return _regenerator2.default.wrap(function _callee6$(_context6) {
|
|
220
|
-
while (1) {
|
|
221
|
-
switch (_context6.prev = _context6.next) {
|
|
222
|
-
case 0:
|
|
223
|
-
_context6.next = 2;
|
|
224
|
-
return exec('restart', services);
|
|
225
|
-
|
|
226
|
-
case 2:
|
|
227
|
-
case 'end':
|
|
228
|
-
return _context6.stop();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}, _callee6, _this6);
|
|
232
|
-
}))();
|
|
89
|
+
|
|
90
|
+
async restart(services) {
|
|
91
|
+
await exec('restart', services);
|
|
233
92
|
},
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7() {
|
|
238
|
-
return _regenerator2.default.wrap(function _callee7$(_context7) {
|
|
239
|
-
while (1) {
|
|
240
|
-
switch (_context7.prev = _context7.next) {
|
|
241
|
-
case 0:
|
|
242
|
-
_context7.next = 2;
|
|
243
|
-
return exec('kill', services);
|
|
244
|
-
|
|
245
|
-
case 2:
|
|
246
|
-
case 'end':
|
|
247
|
-
return _context7.stop();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}, _callee7, _this7);
|
|
251
|
-
}))();
|
|
93
|
+
|
|
94
|
+
async kill(services) {
|
|
95
|
+
await exec('kill', services);
|
|
252
96
|
},
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
case 0:
|
|
261
|
-
if (!services) {
|
|
262
|
-
services = [];
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
_context8.next = 3;
|
|
266
|
-
return exec('rm', ['-f', '-v'].concat((0, _toConsumableArray3.default)(services)));
|
|
267
|
-
|
|
268
|
-
case 3:
|
|
269
|
-
case 'end':
|
|
270
|
-
return _context8.stop();
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}, _callee8, _this8);
|
|
274
|
-
}))();
|
|
97
|
+
|
|
98
|
+
async rm(services) {
|
|
99
|
+
if (!services) {
|
|
100
|
+
services = [];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
await exec('rm', ['-f', '-v', ...services]);
|
|
275
104
|
},
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return exec('pull', services);
|
|
291
|
-
|
|
292
|
-
case 3:
|
|
293
|
-
_context9.t0 = toLookupTable;
|
|
294
|
-
_context9.next = 6;
|
|
295
|
-
return _this9.getLaunchedServiceNames();
|
|
296
|
-
|
|
297
|
-
case 6:
|
|
298
|
-
_context9.t1 = _context9.sent;
|
|
299
|
-
launchedServiceNames = (0, _context9.t0)(_context9.t1);
|
|
300
|
-
servicesToRelaunch = services.filter(function (name) {
|
|
301
|
-
return launchedServiceNames[name];
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
if (!servicesToRelaunch.length) {
|
|
305
|
-
_context9.next = 12;
|
|
306
|
-
break;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
_context9.next = 12;
|
|
310
|
-
return exec('up', ['-d', '--no-deps'].concat((0, _toConsumableArray3.default)(servicesToRelaunch)));
|
|
311
|
-
|
|
312
|
-
case 12:
|
|
313
|
-
case 'end':
|
|
314
|
-
return _context9.stop();
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}, _callee9, _this9);
|
|
318
|
-
}))();
|
|
105
|
+
|
|
106
|
+
async update(services) {
|
|
107
|
+
if (!services) {
|
|
108
|
+
services = [];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
await exec('pull', services); // only relaunch services which are already running
|
|
112
|
+
|
|
113
|
+
const launchedServiceNames = toLookupTable(await this.getLaunchedServiceNames());
|
|
114
|
+
const servicesToRelaunch = services.filter(name => launchedServiceNames[name]);
|
|
115
|
+
|
|
116
|
+
if (servicesToRelaunch.length) {
|
|
117
|
+
await exec('up', ['-d', '--no-deps', ...servicesToRelaunch]);
|
|
118
|
+
}
|
|
319
119
|
},
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
_context10.next = 3;
|
|
333
|
-
return exec('logs', ['-f', '--tail=250'].concat((0, _toConsumableArray3.default)(services)), { pipeLog: true, maxBuffer: Infinity });
|
|
334
|
-
|
|
335
|
-
case 3:
|
|
336
|
-
case 'end':
|
|
337
|
-
return _context10.stop();
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}, _callee10, _this10);
|
|
341
|
-
}))();
|
|
120
|
+
|
|
121
|
+
async spawnLogStream(services) {
|
|
122
|
+
if (!services) {
|
|
123
|
+
services = [];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
await exec('logs', ['-f', '--tail=250', ...services], {
|
|
127
|
+
pipeLog: true,
|
|
128
|
+
maxBuffer: Infinity
|
|
129
|
+
});
|
|
342
130
|
},
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
if (container) {
|
|
361
|
-
_context11.next = 6;
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return _context11.abrupt('return', null);
|
|
366
|
-
|
|
367
|
-
case 6:
|
|
368
|
-
portConfig = container.raw.NetworkSettings.Ports[privatePort + '/tcp'];
|
|
369
|
-
|
|
370
|
-
if (!(!Array.isArray(portConfig) || portConfig.length === 0)) {
|
|
371
|
-
_context11.next = 9;
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return _context11.abrupt('return', null);
|
|
376
|
-
|
|
377
|
-
case 9:
|
|
378
|
-
return _context11.abrupt('return', Number(portConfig[0].HostPort));
|
|
379
|
-
|
|
380
|
-
case 10:
|
|
381
|
-
case 'end':
|
|
382
|
-
return _context11.stop();
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}, _callee11, _this11);
|
|
386
|
-
}))();
|
|
131
|
+
|
|
132
|
+
async port(service, privatePort, index) {
|
|
133
|
+
if (index == null) index = 1;
|
|
134
|
+
const container = (await this.ps(service)).pop();
|
|
135
|
+
|
|
136
|
+
if (!container) {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const portConfig = container.raw.NetworkSettings.Ports[`${privatePort}/tcp`];
|
|
141
|
+
|
|
142
|
+
if (!Array.isArray(portConfig) || portConfig.length === 0) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return Number(portConfig[0].HostPort);
|
|
387
147
|
},
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
case 0:
|
|
397
|
-
yamlOut = _jsYaml2.default.safeDump(config, { skipInvalid: true });
|
|
398
|
-
_context12.next = 3;
|
|
399
|
-
return _fs2.default.writeFileAsync(getCompiledDockerComposePath(), yamlOut);
|
|
400
|
-
|
|
401
|
-
case 3:
|
|
402
|
-
|
|
403
|
-
debug('Wrote docker-compose.tmp.yml', yamlOut);
|
|
404
|
-
|
|
405
|
-
case 4:
|
|
406
|
-
case 'end':
|
|
407
|
-
return _context12.stop();
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}, _callee12, _this12);
|
|
411
|
-
}))();
|
|
148
|
+
|
|
149
|
+
async writeConfig(config) {
|
|
150
|
+
const yamlOut = _jsYaml.default.safeDump(config, {
|
|
151
|
+
skipInvalid: true
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
await _fs.default.writeFileAsync(getCompiledDockerComposePath(), yamlOut);
|
|
155
|
+
debug('Wrote docker-compose.tmp.yml', yamlOut);
|
|
412
156
|
},
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
return exec('config', [], { useOriginalDockerComposeFiles: true, noLog: true });
|
|
424
|
-
|
|
425
|
-
case 2:
|
|
426
|
-
output = _context13.sent;
|
|
427
|
-
config = _jsYaml2.default.safeLoad(output);
|
|
428
|
-
return _context13.abrupt('return', config);
|
|
429
|
-
|
|
430
|
-
case 5:
|
|
431
|
-
case 'end':
|
|
432
|
-
return _context13.stop();
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}, _callee13, _this13);
|
|
436
|
-
}))();
|
|
157
|
+
|
|
158
|
+
async getConfig() {
|
|
159
|
+
const output = await exec('config', [], {
|
|
160
|
+
useOriginalDockerComposeFiles: true,
|
|
161
|
+
noLog: true
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
const config = _jsYaml.default.safeLoad(output);
|
|
165
|
+
|
|
166
|
+
return config;
|
|
437
167
|
},
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
return _dockerClient2.default.listContainers({
|
|
450
|
-
all: true,
|
|
451
|
-
filters: {
|
|
452
|
-
label: ['com.docker.compose.project=' + projectName]
|
|
453
|
-
}
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
case 3:
|
|
457
|
-
ps = _context14.sent;
|
|
458
|
-
names = ps.map(function (container) {
|
|
459
|
-
return container.Labels['com.docker.compose.service'];
|
|
460
|
-
});
|
|
461
|
-
return _context14.abrupt('return', names);
|
|
462
|
-
|
|
463
|
-
case 6:
|
|
464
|
-
case 'end':
|
|
465
|
-
return _context14.stop();
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
}, _callee14, _this14);
|
|
469
|
-
}))();
|
|
168
|
+
|
|
169
|
+
async getLaunchedServiceNames() {
|
|
170
|
+
const projectName = navy.normalisedName;
|
|
171
|
+
const ps = await _dockerClient.default.listContainers({
|
|
172
|
+
all: true,
|
|
173
|
+
filters: {
|
|
174
|
+
label: [`com.docker.compose.project=${projectName}`]
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
const names = ps.map(container => container.Labels['com.docker.compose.service']);
|
|
178
|
+
return names;
|
|
470
179
|
},
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
return
|
|
475
|
-
var config;
|
|
476
|
-
return _regenerator2.default.wrap(function _callee15$(_context15) {
|
|
477
|
-
while (1) {
|
|
478
|
-
switch (_context15.prev = _context15.next) {
|
|
479
|
-
case 0:
|
|
480
|
-
_context15.next = 2;
|
|
481
|
-
return driver.getConfig();
|
|
482
|
-
|
|
483
|
-
case 2:
|
|
484
|
-
config = _context15.sent;
|
|
485
|
-
return _context15.abrupt('return', (0, _keys2.default)(config.services));
|
|
486
|
-
|
|
487
|
-
case 4:
|
|
488
|
-
case 'end':
|
|
489
|
-
return _context15.stop();
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
}, _callee15, _this15);
|
|
493
|
-
}))();
|
|
180
|
+
|
|
181
|
+
async getAvailableServiceNames() {
|
|
182
|
+
const config = await driver.getConfig();
|
|
183
|
+
return Object.keys(config.services);
|
|
494
184
|
}
|
|
495
|
-
};
|
|
496
185
|
|
|
186
|
+
};
|
|
497
187
|
return driver;
|
|
498
188
|
}
|
|
499
189
|
|
|
500
190
|
function toLookupTable(keys) {
|
|
501
|
-
|
|
502
|
-
keys.forEach(
|
|
503
|
-
return lookupTable[key] = true;
|
|
504
|
-
});
|
|
191
|
+
const lookupTable = {};
|
|
192
|
+
keys.forEach(key => lookupTable[key] = true);
|
|
505
193
|
return lookupTable;
|
|
506
194
|
}
|
|
195
|
+
|
|
507
196
|
module.exports = exports.default;
|