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
package/lib/errors.js
CHANGED
|
@@ -1,76 +1,42 @@
|
|
|
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
|
-
exports.NavyNotInitialisedError = exports.NavyError =
|
|
7
|
-
|
|
8
|
-
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
|
|
9
|
-
|
|
10
|
-
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
|
|
11
|
-
|
|
12
|
-
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
|
13
|
-
|
|
14
|
-
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
|
15
|
-
|
|
16
|
-
var _get2 = require('babel-runtime/helpers/get');
|
|
17
|
-
|
|
18
|
-
var _get3 = _interopRequireDefault(_get2);
|
|
19
|
-
|
|
20
|
-
var _inherits2 = require('babel-runtime/helpers/inherits');
|
|
21
|
-
|
|
22
|
-
var _inherits3 = _interopRequireDefault(_inherits2);
|
|
8
|
+
exports.NavyNotInitialisedError = exports.NavyError = void 0;
|
|
23
9
|
|
|
24
|
-
var
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
25
11
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var _createClass3 = _interopRequireDefault(_createClass2);
|
|
31
|
-
|
|
32
|
-
var _chalk = require('chalk');
|
|
12
|
+
class NavyError {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
this.message = message;
|
|
15
|
+
}
|
|
33
16
|
|
|
34
|
-
|
|
17
|
+
prettyPrint() {
|
|
18
|
+
console.log();
|
|
19
|
+
console.log(_chalk.default.bgRed(_chalk.default.bold(' ERROR ')));
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(' ' + this.message);
|
|
22
|
+
console.log();
|
|
23
|
+
}
|
|
35
24
|
|
|
36
|
-
|
|
25
|
+
}
|
|
37
26
|
|
|
38
|
-
|
|
39
|
-
function NavyError(message) {
|
|
40
|
-
(0, _classCallCheck3.default)(this, NavyError);
|
|
27
|
+
exports.NavyError = NavyError;
|
|
41
28
|
|
|
42
|
-
|
|
29
|
+
class NavyNotInitialisedError extends NavyError {
|
|
30
|
+
constructor(navyName) {
|
|
31
|
+
super('Navy "' + navyName + '" not imported');
|
|
43
32
|
}
|
|
44
33
|
|
|
45
|
-
(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
console.log(_chalk2.default.bgRed(_chalk2.default.bold(' ERROR ')));
|
|
50
|
-
console.log();
|
|
51
|
-
console.log(' ' + this.message);
|
|
52
|
-
console.log();
|
|
53
|
-
}
|
|
54
|
-
}]);
|
|
55
|
-
return NavyError;
|
|
56
|
-
}();
|
|
57
|
-
|
|
58
|
-
var NavyNotInitialisedError = exports.NavyNotInitialisedError = function (_NavyError) {
|
|
59
|
-
(0, _inherits3.default)(NavyNotInitialisedError, _NavyError);
|
|
60
|
-
|
|
61
|
-
function NavyNotInitialisedError(navyName) {
|
|
62
|
-
(0, _classCallCheck3.default)(this, NavyNotInitialisedError);
|
|
63
|
-
return (0, _possibleConstructorReturn3.default)(this, (NavyNotInitialisedError.__proto__ || (0, _getPrototypeOf2.default)(NavyNotInitialisedError)).call(this, 'Navy "' + navyName + '" not imported'));
|
|
34
|
+
prettyPrint() {
|
|
35
|
+
super.prettyPrint();
|
|
36
|
+
console.log(' Make sure you\'ve imported the navy with ' + _chalk.default.bold('navy import'));
|
|
37
|
+
console.log();
|
|
64
38
|
}
|
|
65
39
|
|
|
66
|
-
|
|
67
|
-
key: 'prettyPrint',
|
|
68
|
-
value: function prettyPrint() {
|
|
69
|
-
(0, _get3.default)(NavyNotInitialisedError.prototype.__proto__ || (0, _getPrototypeOf2.default)(NavyNotInitialisedError.prototype), 'prettyPrint', this).call(this);
|
|
40
|
+
}
|
|
70
41
|
|
|
71
|
-
|
|
72
|
-
console.log();
|
|
73
|
-
}
|
|
74
|
-
}]);
|
|
75
|
-
return NavyNotInitialisedError;
|
|
76
|
-
}(NavyError);
|
|
42
|
+
exports.NavyNotInitialisedError = NavyNotInitialisedError;
|
package/lib/http-proxy.js
CHANGED
|
@@ -1,173 +1,87 @@
|
|
|
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
|
-
exports.reconfigureHTTPProxy =
|
|
7
|
-
|
|
8
|
-
var _regenerator = require('babel-runtime/regenerator');
|
|
9
|
-
|
|
10
|
-
var _regenerator2 = _interopRequireDefault(_regenerator);
|
|
11
|
-
|
|
12
|
-
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
|
13
|
-
|
|
14
|
-
var _getIterator3 = _interopRequireDefault(_getIterator2);
|
|
15
|
-
|
|
16
|
-
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
|
17
|
-
|
|
18
|
-
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
|
19
|
-
|
|
20
|
-
var updateComposeConfig = function () {
|
|
21
|
-
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(navies) {
|
|
22
|
-
var networks, networksConfig, config;
|
|
23
|
-
return _regenerator2.default.wrap(function _callee$(_context) {
|
|
24
|
-
while (1) {
|
|
25
|
-
switch (_context.prev = _context.next) {
|
|
26
|
-
case 0:
|
|
27
|
-
_context.next = 2;
|
|
28
|
-
return _dockerClient2.default.listNetworks().filter(function (net) {
|
|
29
|
-
return net.Name.indexOf('_') !== -1;
|
|
30
|
-
}) // is docker-compose network?
|
|
31
|
-
.filter(function (net) {
|
|
32
|
-
var _iteratorNormalCompletion = true;
|
|
33
|
-
var _didIteratorError = false;
|
|
34
|
-
var _iteratorError = undefined;
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
for (var _iterator = (0, _getIterator3.default)(navies), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
38
|
-
var navy = _step.value;
|
|
39
|
-
|
|
40
|
-
if (net.Name.indexOf(navy + '_') === 0) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
} catch (err) {
|
|
45
|
-
_didIteratorError = true;
|
|
46
|
-
_iteratorError = err;
|
|
47
|
-
} finally {
|
|
48
|
-
try {
|
|
49
|
-
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
50
|
-
_iterator.return();
|
|
51
|
-
}
|
|
52
|
-
} finally {
|
|
53
|
-
if (_didIteratorError) {
|
|
54
|
-
throw _iteratorError;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return false;
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
case 2:
|
|
63
|
-
networks = _context.sent;
|
|
64
|
-
networksConfig = {};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
networks.forEach(function (net) {
|
|
68
|
-
return networksConfig[net.Name] = {
|
|
69
|
-
external: true
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
config = {
|
|
74
|
-
version: '2',
|
|
75
|
-
|
|
76
|
-
services: {
|
|
77
|
-
'nginx-proxy': {
|
|
78
|
-
image: 'navycloud/navy-proxy',
|
|
79
|
-
ports: ['80:80'],
|
|
80
|
-
networks: networks.map(function (net) {
|
|
81
|
-
return net.Name;
|
|
82
|
-
}),
|
|
83
|
-
volumes: ['/var/run/docker.sock:/tmp/docker.sock:ro'],
|
|
84
|
-
restart: 'always'
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
networks: networksConfig
|
|
89
|
-
};
|
|
90
|
-
_context.next = 8;
|
|
91
|
-
return _fs2.default.writeFileAsync(_path2.default.join(_os2.default.tmpdir(), 'navyinternaldockercompose.yml'), _jsYaml2.default.dump(config));
|
|
92
|
-
|
|
93
|
-
case 8:
|
|
94
|
-
case 'end':
|
|
95
|
-
return _context.stop();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}, _callee, this);
|
|
99
|
-
}));
|
|
100
|
-
|
|
101
|
-
return function updateComposeConfig(_x) {
|
|
102
|
-
return _ref.apply(this, arguments);
|
|
103
|
-
};
|
|
104
|
-
}();
|
|
105
|
-
|
|
106
|
-
var reconfigureHTTPProxy = exports.reconfigureHTTPProxy = function () {
|
|
107
|
-
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
|
|
108
|
-
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
109
|
-
return _regenerator2.default.wrap(function _callee2$(_context2) {
|
|
110
|
-
while (1) {
|
|
111
|
-
switch (_context2.prev = _context2.next) {
|
|
112
|
-
case 0:
|
|
113
|
-
if (opts.navies) {
|
|
114
|
-
_context2.next = 4;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
_context2.next = 3;
|
|
119
|
-
return (0, _navy.getLaunchedNavyNames)();
|
|
120
|
-
|
|
121
|
-
case 3:
|
|
122
|
-
opts.navies = _context2.sent;
|
|
123
|
-
|
|
124
|
-
case 4:
|
|
125
|
-
_context2.next = 6;
|
|
126
|
-
return updateComposeConfig(opts.navies);
|
|
127
|
-
|
|
128
|
-
case 6:
|
|
129
|
-
|
|
130
|
-
(0, _driverLogging.log)('Configuring HTTP proxy...');
|
|
131
|
-
_context2.next = 9;
|
|
132
|
-
return (0, _execAsync.execAsync)('docker-compose', ['-f', _path2.default.join(_os2.default.tmpdir(), 'navyinternaldockercompose.yml'), '-p', 'navyinternal', 'up', '-d']);
|
|
133
|
-
|
|
134
|
-
case 9:
|
|
135
|
-
case 'end':
|
|
136
|
-
return _context2.stop();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}, _callee2, this);
|
|
140
|
-
}));
|
|
141
|
-
|
|
142
|
-
return function reconfigureHTTPProxy() {
|
|
143
|
-
return _ref2.apply(this, arguments);
|
|
144
|
-
};
|
|
145
|
-
}();
|
|
8
|
+
exports.reconfigureHTTPProxy = reconfigureHTTPProxy;
|
|
146
9
|
|
|
147
|
-
var _os = require(
|
|
10
|
+
var _os = _interopRequireDefault(require("os"));
|
|
148
11
|
|
|
149
|
-
var
|
|
12
|
+
var _path = _interopRequireDefault(require("path"));
|
|
150
13
|
|
|
151
|
-
var
|
|
14
|
+
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
152
15
|
|
|
153
|
-
var
|
|
16
|
+
var _dockerClient = _interopRequireDefault(require("./util/docker-client"));
|
|
154
17
|
|
|
155
|
-
var
|
|
18
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
156
19
|
|
|
157
|
-
var
|
|
20
|
+
var _https = require("./util/https");
|
|
158
21
|
|
|
159
|
-
var
|
|
22
|
+
var _execAsync = require("./util/exec-async");
|
|
160
23
|
|
|
161
|
-
var
|
|
24
|
+
var _driverLogging = require("./driver-logging");
|
|
162
25
|
|
|
163
|
-
var
|
|
26
|
+
var _navy = require("./navy");
|
|
164
27
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
28
|
+
async function updateComposeConfig(navies) {
|
|
29
|
+
const networks = await _dockerClient.default.listNetworks().filter(net => net.Name.indexOf('_') !== -1) // is docker-compose network?
|
|
30
|
+
.filter(net => {
|
|
31
|
+
for (const navy of navies) {
|
|
32
|
+
if (net.Name.indexOf(navy + '_') === 0) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return false;
|
|
38
|
+
});
|
|
39
|
+
const networksConfig = {};
|
|
40
|
+
networks.forEach(net => networksConfig[net.Name] = {
|
|
41
|
+
external: true
|
|
42
|
+
});
|
|
43
|
+
const ports = ['80:80'];
|
|
44
|
+
const volumes = ['/var/run/docker.sock:/tmp/docker.sock:ro']; // Enable HTTPS for services that
|
|
45
|
+
// match crt file names in tlsRootCaDir
|
|
46
|
+
|
|
47
|
+
const certsPath = await (0, _https.getCertsPath)(true);
|
|
48
|
+
|
|
49
|
+
if (certsPath) {
|
|
50
|
+
ports.push('443:443');
|
|
51
|
+
volumes.push(`${certsPath}:/etc/nginx/certs`);
|
|
52
|
+
volumes.push(`${certsPath}:/etc/nginx/dhparam`); // to persist DH params
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const config = {
|
|
56
|
+
version: '2',
|
|
57
|
+
services: {
|
|
58
|
+
'nginx-proxy': {
|
|
59
|
+
image: 'navycloud/navy-proxy',
|
|
60
|
+
ports,
|
|
61
|
+
networks: networks.map(net => net.Name),
|
|
62
|
+
volumes,
|
|
63
|
+
restart: 'always'
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
networks: networksConfig
|
|
67
|
+
};
|
|
172
68
|
|
|
173
|
-
|
|
69
|
+
_fs.default.writeFileSync(_path.default.join(_os.default.tmpdir(), 'navyinternaldockercompose.yml'), _jsYaml.default.dump(config));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function reconfigureHTTPProxy(opts = {}) {
|
|
73
|
+
const navyInternalYamlFile = _path.default.join(_os.default.tmpdir(), 'navyinternaldockercompose.yml');
|
|
74
|
+
|
|
75
|
+
if (opts.restart) {
|
|
76
|
+
// proxy needs to be recreated to detect changes (deletes) in /etc/nginx/certs
|
|
77
|
+
if (_fs.default.existsSync(navyInternalYamlFile)) {
|
|
78
|
+
(0, _driverLogging.log)('Restarting HTTP proxy...');
|
|
79
|
+
await (0, _execAsync.execAsync)('docker-compose', ['-f', navyInternalYamlFile, '-p', 'navyinternal', 'rm', '-s', '-f', 'nginx-proxy']);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!opts.navies) opts.navies = await (0, _navy.getLaunchedNavyNames)();
|
|
84
|
+
await updateComposeConfig(opts.navies);
|
|
85
|
+
(0, _driverLogging.log)('Configuring HTTP proxy...');
|
|
86
|
+
await (0, _execAsync.execAsync)('docker-compose', ['-f', navyInternalYamlFile, '-p', 'navyinternal', 'up', '-d']);
|
|
87
|
+
}
|
package/lib/index.js
CHANGED
|
@@ -1,59 +1,56 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _navy = require('./navy');
|
|
9
|
-
|
|
10
|
-
Object.defineProperty(exports, 'Navy', {
|
|
6
|
+
Object.defineProperty(exports, "Navy", {
|
|
11
7
|
enumerable: true,
|
|
12
|
-
get: function
|
|
8
|
+
get: function () {
|
|
13
9
|
return _navy.Navy;
|
|
14
10
|
}
|
|
15
11
|
});
|
|
16
|
-
Object.defineProperty(exports,
|
|
12
|
+
Object.defineProperty(exports, "NavyError", {
|
|
17
13
|
enumerable: true,
|
|
18
|
-
get: function
|
|
19
|
-
return
|
|
14
|
+
get: function () {
|
|
15
|
+
return _errors.NavyError;
|
|
20
16
|
}
|
|
21
17
|
});
|
|
22
|
-
|
|
18
|
+
exports.Service = void 0;
|
|
19
|
+
Object.defineProperty(exports, "getLaunchedNavies", {
|
|
23
20
|
enumerable: true,
|
|
24
|
-
get: function
|
|
21
|
+
get: function () {
|
|
25
22
|
return _navy.getLaunchedNavies;
|
|
26
23
|
}
|
|
27
24
|
});
|
|
28
|
-
Object.defineProperty(exports,
|
|
25
|
+
Object.defineProperty(exports, "getLaunchedNavyNames", {
|
|
29
26
|
enumerable: true,
|
|
30
|
-
get: function
|
|
27
|
+
get: function () {
|
|
31
28
|
return _navy.getLaunchedNavyNames;
|
|
32
29
|
}
|
|
33
30
|
});
|
|
34
|
-
|
|
35
|
-
var _errors = require('./errors');
|
|
36
|
-
|
|
37
|
-
Object.defineProperty(exports, 'NavyError', {
|
|
31
|
+
Object.defineProperty(exports, "getNavy", {
|
|
38
32
|
enumerable: true,
|
|
39
|
-
get: function
|
|
40
|
-
return
|
|
33
|
+
get: function () {
|
|
34
|
+
return _navy.getNavy;
|
|
41
35
|
}
|
|
42
36
|
});
|
|
43
|
-
|
|
44
|
-
var _helpers = require('./middleware/helpers');
|
|
45
|
-
|
|
46
|
-
Object.defineProperty(exports, 'middlewareHelpers', {
|
|
37
|
+
Object.defineProperty(exports, "middlewareHelpers", {
|
|
47
38
|
enumerable: true,
|
|
48
|
-
get: function
|
|
39
|
+
get: function () {
|
|
49
40
|
return _helpers.middlewareHelpers;
|
|
50
41
|
}
|
|
51
42
|
});
|
|
52
43
|
|
|
53
|
-
var
|
|
44
|
+
var _navy = require("./navy");
|
|
45
|
+
|
|
46
|
+
var _Service = _interopRequireWildcard(require("./service"));
|
|
47
|
+
|
|
48
|
+
exports.Service = _Service;
|
|
49
|
+
|
|
50
|
+
var _errors = require("./errors");
|
|
54
51
|
|
|
55
|
-
var
|
|
52
|
+
var _helpers = require("./middleware/helpers");
|
|
56
53
|
|
|
57
|
-
function
|
|
54
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
58
55
|
|
|
59
|
-
|
|
56
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
|
+
|
|
10
|
+
var _serviceHost = require("../util/service-host");
|
|
11
|
+
|
|
12
|
+
var _https = require("../util/https");
|
|
13
|
+
|
|
14
|
+
const getServiceHTTPProxyConfig = (serviceName, navyFile) => {
|
|
15
|
+
if (navyFile && navyFile.httpProxy && navyFile.httpProxy[serviceName]) {
|
|
16
|
+
return navyFile.httpProxy[serviceName];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return null;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const serviceGetAutoProxyPortOr80 = (service, navyFile) => {
|
|
23
|
+
const autoPorts = navyFile && Array.isArray(navyFile.httpProxyAutoPorts) && navyFile.httpProxyAutoPorts || ['80'];
|
|
24
|
+
return service.ports && (0, _lodash.find)(autoPorts, autoPort => {
|
|
25
|
+
const autoPortString = autoPort.toString();
|
|
26
|
+
return (0, _lodash.find)(service.ports, portDefinition => {
|
|
27
|
+
// In older versions of Docker Compose `ports` could just be an array of string/number,
|
|
28
|
+
// but it's changed to e.g. {target: "80"}
|
|
29
|
+
const port = typeof portDefinition === 'object' && 'target' in portDefinition ? portDefinition.target : portDefinition;
|
|
30
|
+
const portString = port.toString();
|
|
31
|
+
return portString === autoPortString || portString.startsWith(`${autoPortString}:`) || portString.startsWith(`${autoPortString}/`);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var _default = navy => async (config, state) => {
|
|
37
|
+
const navyFile = await navy.getNavyFile();
|
|
38
|
+
const services = {};
|
|
39
|
+
const externalIP = await navy.externalIP();
|
|
40
|
+
await Promise.all(Object.keys(config.services).map(async serviceName => {
|
|
41
|
+
const service = config.services[serviceName];
|
|
42
|
+
let proxyConfig = getServiceHTTPProxyConfig(serviceName, navyFile); // proxy port 80 even without service config, or a different port with config httpProxyAutoPorts
|
|
43
|
+
|
|
44
|
+
if (!proxyConfig) {
|
|
45
|
+
const autoPort = serviceGetAutoProxyPortOr80(service, navyFile);
|
|
46
|
+
|
|
47
|
+
if (autoPort) {
|
|
48
|
+
proxyConfig = {
|
|
49
|
+
port: parseInt(autoPort)
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (proxyConfig) {
|
|
55
|
+
const hostName = await (0, _serviceHost.createHostForService)(serviceName, navy.normalisedName, externalIP);
|
|
56
|
+
if (proxyConfig.enableHttps) await (0, _https.createCert)({
|
|
57
|
+
hostName
|
|
58
|
+
});
|
|
59
|
+
return services[serviceName] = { ...service,
|
|
60
|
+
environment: {
|
|
61
|
+
'VIRTUAL_HOST': hostName,
|
|
62
|
+
'VIRTUAL_PORT': proxyConfig.port,
|
|
63
|
+
...service.environment
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return services[serviceName] = service;
|
|
69
|
+
}));
|
|
70
|
+
return { ...config,
|
|
71
|
+
services
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
exports.default = _default;
|
|
76
|
+
module.exports = exports.default;
|
|
@@ -1,37 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var _keys2 = _interopRequireDefault(_keys);
|
|
10
|
-
|
|
11
|
-
var _extends2 = require('babel-runtime/helpers/extends');
|
|
12
|
-
|
|
13
|
-
var _extends3 = _interopRequireDefault(_extends2);
|
|
14
|
-
|
|
15
|
-
var _helpers = require('./helpers');
|
|
16
|
-
|
|
17
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
+
var _helpers = require("./helpers");
|
|
18
9
|
|
|
19
10
|
function rewriteService(service, serviceName, serviceState) {
|
|
20
11
|
if (!serviceState || !serviceState._develop) return service;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return (0, _extends3.default)({}, service, {
|
|
12
|
+
const _serviceState = serviceState;
|
|
13
|
+
return { ...service,
|
|
25
14
|
stdin_open: true,
|
|
26
|
-
volumes: _helpers.middlewareHelpers.addVolumes(service,
|
|
27
|
-
return local + ':' + _serviceState._develop.mounts[local];
|
|
28
|
-
})),
|
|
15
|
+
volumes: _helpers.middlewareHelpers.addVolumes(service, Object.keys(serviceState._develop.mounts).map(local => `${local}:${_serviceState._develop.mounts[local]}`)),
|
|
29
16
|
command: serviceState._develop.command ? serviceState._develop.command : service.command
|
|
30
|
-
}
|
|
17
|
+
};
|
|
31
18
|
}
|
|
32
19
|
|
|
33
|
-
|
|
34
|
-
return _helpers.middlewareHelpers.rewriteServicesWithState(config, state, rewriteService);
|
|
35
|
-
};
|
|
20
|
+
var _default = (config, state) => _helpers.middlewareHelpers.rewriteServicesWithState(config, state, rewriteService);
|
|
36
21
|
|
|
22
|
+
exports.default = _default;
|
|
37
23
|
module.exports = exports.default;
|
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.middlewareHelpers =
|
|
6
|
+
exports.middlewareHelpers = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _extends3 = _interopRequireDefault(_extends2);
|
|
15
|
-
|
|
16
|
-
var _lodash = require('lodash');
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
|
-
var middlewareHelpers = exports.middlewareHelpers = {
|
|
21
|
-
rewriteServices: function rewriteServices(config, serviceMapperFn) {
|
|
22
|
-
return (0, _extends3.default)({}, config, {
|
|
10
|
+
const middlewareHelpers = {
|
|
11
|
+
rewriteServices(config, serviceMapperFn) {
|
|
12
|
+
return { ...config,
|
|
23
13
|
services: (0, _lodash.mapValues)(config.services || {}, serviceMapperFn)
|
|
24
|
-
}
|
|
14
|
+
};
|
|
25
15
|
},
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
|
|
17
|
+
rewriteServicesWithState(config, state, serviceMapperFn) {
|
|
18
|
+
const normalisedState = state || {
|
|
19
|
+
services: {}
|
|
20
|
+
};
|
|
28
21
|
|
|
29
22
|
function mapperFn(service, serviceName) {
|
|
30
23
|
return serviceMapperFn(service, serviceName, normalisedState.services[serviceName]);
|
|
31
24
|
}
|
|
32
25
|
|
|
33
|
-
return
|
|
26
|
+
return { ...config,
|
|
34
27
|
services: (0, _lodash.mapValues)(config.services || {}, mapperFn)
|
|
35
|
-
}
|
|
28
|
+
};
|
|
36
29
|
},
|
|
37
|
-
addVolumes: function addVolumes(service, volumes) {
|
|
38
|
-
var normalisedVolumes = service.volumes || [];
|
|
39
30
|
|
|
40
|
-
|
|
31
|
+
addVolumes(service, volumes) {
|
|
32
|
+
const normalisedVolumes = service.volumes || [];
|
|
33
|
+
return [...normalisedVolumes, ...volumes];
|
|
41
34
|
}
|
|
42
|
-
|
|
35
|
+
|
|
36
|
+
};
|
|
37
|
+
exports.middlewareHelpers = middlewareHelpers;
|