mongodb-runner 6.8.5 → 6.10.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/README.md +17 -0
- package/dist/.esm-wrapper.mjs +9 -0
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/docker-compose.d.ts +15 -0
- package/dist/docker-compose.d.ts.map +1 -0
- package/dist/docker-compose.js +75 -0
- package/dist/docker-compose.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/mongocluster.d.ts +25 -1
- package/dist/mongocluster.d.ts.map +1 -1
- package/dist/mongocluster.js +151 -27
- package/dist/mongocluster.js.map +1 -1
- package/dist/mongoserver.d.ts +2 -0
- package/dist/mongoserver.d.ts.map +1 -1
- package/dist/mongoserver.js +11 -2
- package/dist/mongoserver.js.map +1 -1
- package/dist/oidc.d.ts.map +1 -1
- package/dist/oidc.js +3 -2
- package/dist/oidc.js.map +1 -1
- package/dist/sls.d.ts +49 -0
- package/dist/sls.d.ts.map +1 -0
- package/dist/sls.js +200 -0
- package/dist/sls.js.map +1 -0
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +12 -1
- package/dist/util.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -70,6 +70,16 @@ try {
|
|
|
70
70
|
}
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
+
## Environment variables
|
|
74
|
+
|
|
75
|
+
Any CLI option can also be set through a `MONGODB_RUNNER_`-prefixed environment
|
|
76
|
+
variable, e.g. `MONGODB_RUNNER_DOWNLOAD_DIR` for `--downloadDir`. Explicitly
|
|
77
|
+
passed options take precedence.
|
|
78
|
+
|
|
79
|
+
`MONGODB_RUNNER_DOWNLOAD_DIR` is additionally honored when using `MongoCluster`
|
|
80
|
+
programmatically, which is useful for caching server binaries in CI without
|
|
81
|
+
having to change each call site.
|
|
82
|
+
|
|
73
83
|
## Config file
|
|
74
84
|
|
|
75
85
|
You can specify a config file for the CLI using `--config`:
|
|
@@ -99,6 +109,13 @@ You can specify a config file for the CLI using `--config`:
|
|
|
99
109
|
$ npx mongodb-runner start --config <path/to/config.json>
|
|
100
110
|
```
|
|
101
111
|
|
|
112
|
+
## DSC clusters
|
|
113
|
+
|
|
114
|
+
mongodb-runner can launch clusters that use DSC, backed by an SLS storage
|
|
115
|
+
layer, managing the storage backend's docker compose project alongside the
|
|
116
|
+
mongod processes. See
|
|
117
|
+
[docs/disaggregated-storage.md](./docs/disaggregated-storage.md).
|
|
118
|
+
|
|
102
119
|
## License
|
|
103
120
|
|
|
104
121
|
Apache 2.0
|
package/dist/.esm-wrapper.mjs
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import mod from "./index.js";
|
|
2
2
|
|
|
3
3
|
export default mod;
|
|
4
|
+
export const DockerComposeProject = mod.DockerComposeProject;
|
|
4
5
|
export const MongoCluster = mod.MongoCluster;
|
|
5
6
|
export const MongoServer = mod.MongoServer;
|
|
7
|
+
export const SLS_CELL1 = mod.SLS_CELL1;
|
|
8
|
+
export const SLS_CELL2 = mod.SLS_CELL2;
|
|
9
|
+
export const SLS_CELL3 = mod.SLS_CELL3;
|
|
10
|
+
export const SLS_HOSTNAME = mod.SLS_HOSTNAME;
|
|
11
|
+
export const createSLSDisaggregatedStorageConfig = mod.createSLSDisaggregatedStorageConfig;
|
|
12
|
+
export const createSLSDisaggregatedStorageOptions = mod.createSLSDisaggregatedStorageOptions;
|
|
13
|
+
export const createSLSMultiCellEnvironment = mod.createSLSMultiCellEnvironment;
|
|
6
14
|
export const exec = mod.exec;
|
|
7
15
|
export const instances = mod.instances;
|
|
16
|
+
export const parseSLSComposeServices = mod.parseSLSComposeServices;
|
|
8
17
|
export const prune = mod.prune;
|
|
9
18
|
export const start = mod.start;
|
|
10
19
|
export const stop = mod.stop;
|
package/dist/cli.js
CHANGED
|
@@ -73,6 +73,10 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
73
73
|
.option('version', {
|
|
74
74
|
type: 'string',
|
|
75
75
|
describe: 'MongoDB server version to use',
|
|
76
|
+
})
|
|
77
|
+
.option('downloadUrl', {
|
|
78
|
+
type: 'string',
|
|
79
|
+
describe: 'Direct URL to a MongoDB tarball to download (takes precedence over --version)',
|
|
76
80
|
})
|
|
77
81
|
.option('logDir', {
|
|
78
82
|
type: 'string',
|
|
@@ -111,6 +115,15 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
111
115
|
.option('oidc', {
|
|
112
116
|
type: 'string',
|
|
113
117
|
describe: 'Configure OIDC authentication on the server',
|
|
118
|
+
})
|
|
119
|
+
.option('slsCompose', {
|
|
120
|
+
type: 'string',
|
|
121
|
+
describe: 'Path to an SLS multi-cell docker-compose.yml; launches the SLS DSC project and configures mongod to use it (requires a DSC-capable mongod via --binDir or --downloadUrl)',
|
|
122
|
+
implies: 'slsImageTag',
|
|
123
|
+
})
|
|
124
|
+
.option('slsImageTag', {
|
|
125
|
+
type: 'string',
|
|
126
|
+
describe: 'SLS docker image tag to use with --slsCompose (e.g. the pinned_sls_commit from the server repo manifest)',
|
|
114
127
|
})
|
|
115
128
|
.option('debug', { type: 'boolean', describe: 'Enable debug output' })
|
|
116
129
|
.option('verbose', { type: 'boolean', describe: 'Enable verbose output' })
|
|
@@ -126,10 +139,10 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
126
139
|
args.push(...argv.args.map(String));
|
|
127
140
|
}
|
|
128
141
|
if (argv.debug || argv.verbose) {
|
|
129
|
-
debug_1.default.enable('mongodb-runner');
|
|
142
|
+
debug_1.default.enable('mongodb-runner,mongodb-downloader');
|
|
130
143
|
}
|
|
131
144
|
if (argv.verbose) {
|
|
132
|
-
debug_1.default.enable('mongodb-runner
|
|
145
|
+
debug_1.default.enable('mongodb-runner*,mongodb-downloader*');
|
|
133
146
|
}
|
|
134
147
|
if (argv.oidc && process.platform !== 'linux') {
|
|
135
148
|
console.warn('OIDC authentication is currently only supported on Linux platforms.');
|
|
@@ -138,7 +151,19 @@ const mongodb_connection_string_url_1 = require("mongodb-connection-string-url")
|
|
|
138
151
|
console.warn('OIDC authentication is currently only supported on Enterprise server versions.');
|
|
139
152
|
}
|
|
140
153
|
async function start() {
|
|
141
|
-
const
|
|
154
|
+
const disaggregatedStorage = argv.slsCompose
|
|
155
|
+
? await utilities.createSLSDisaggregatedStorageOptions({
|
|
156
|
+
composeFile: argv.slsCompose,
|
|
157
|
+
imageTag: argv.slsImageTag,
|
|
158
|
+
})
|
|
159
|
+
: undefined;
|
|
160
|
+
if (disaggregatedStorage && 'sls' in disaggregatedStorage) {
|
|
161
|
+
console.error('Allocated SLS service ports:');
|
|
162
|
+
for (const [serviceName, { addr }] of Object.entries(disaggregatedStorage.sls.services)) {
|
|
163
|
+
console.error(` ${serviceName}: ${addr}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const { cluster, id } = await utilities.start({ ...argv, disaggregatedStorage }, args);
|
|
142
167
|
const cs = new mongodb_connection_string_url_1.ConnectionString(cluster.connectionString);
|
|
143
168
|
console.error(`Server started and running at ${cs.toString()}`);
|
|
144
169
|
if (cluster.oidcIssuer) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAA0B;AAC1B,2CAAwC;AACxC,4CAAoB;AACpB,gDAAwB;AACxB,kDAAgC;AAChC,mDAAqC;AACrC,iFAAiE;AAGjE,CAAC,KAAK;IACJ,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,IAAA,eAAK,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5C,OAAO,CAAC,KAAK,CAAC;SACd,UAAU,CAAC,gBAAgB,CAAC;SAC5B,GAAG,CAAC,gBAAgB,CAAC;SACrB,MAAM,EAAE;SACR,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAU;QACtD,OAAO,EAAE,YAAqB;QAC9B,QAAQ,EAAE,wBAAwB;KACnC,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,8CAA8C;KACzD,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,4CAA4C;KACvD,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,MAAM,CAAC,GAAG;YACR,OAAO,GAAG,CAAC;QACb,CAAC;QACD,QAAQ,EAAE,uCAAuC;KAClD,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,+EAA+E;KAClF,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,wCAAwC;KACnD,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,6CAA6C;KACxD,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAE,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,uFAAuF;KAC1F,CAAC;SACD,MAAM,CAAC,WAAW,EAAE;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,wCAAwC;KACnD,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,iDAAiD;KAC5D,CAAC;SACD,MAAM,CAAC,IAAI,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,uCAAuC;KAClD,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,6CAA6C;KACxD,CAAC;SACD,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,0KAA0K;QAC5K,OAAO,EAAE,aAAa;KACvB,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EACN,0GAA0G;KAC7G,CAAC;SACD,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;SACrE,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC;SACzE,OAAO,CAAC,OAAO,EAAE,0BAA0B,CAAC;SAC5C,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC;SAC1C,OAAO,CAAC,OAAO,EAAE,kDAAkD,CAAC;SACpE,OAAO,CAAC,IAAI,EAAE,0CAA0C,CAAC;SACzD,OAAO,CACN,MAAM,EACN,gEAAgE,CACjE;SACA,aAAa,CAAC,CAAC,EAAE,gCAAgC,CAAC;SAClD,IAAI,EAAE,CAAC,IAAI,CAAC;IACf,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,eAAW,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,eAAW,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CACV,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CACV,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU;YAC1C,CAAC,CAAC,MAAM,SAAS,CAAC,oCAAoC,CAAC;gBACnD,WAAW,EAAE,IAAI,CAAC,UAAU;gBAC5B,QAAQ,EAAE,IAAI,CAAC,WAAY;aAC5B,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,oBAAoB,IAAI,KAAK,IAAI,oBAAoB,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAClD,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAClC,EAAE,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,KAAK,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,CAC3C,EAAE,GAAG,IAAI,EAAE,oBAAoB,EAAE,EACjC,IAAI,CACL,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,gDAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAG1D,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,EAAE,CAAC,iBAAiB,EAAsB,CAAC,GAAG,CAC5C,eAAe,EACf,cAAc,CACf,CAAC;YACF,OAAO,CAAC,KAAK,CACX,wCAAwC,OAAO,CAAC,UAAU,EAAE,CAC7D,CAAC;YACF,OAAO,CAAC,KAAK,CACX,4CAA4C,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CACX,GAAG,IAAI,CAAC,EAAE,cAAc,EAAE,EAAE;YAC1B,CAAC,IAAI,CAAC,SAAS,KAAK,gBAAgB;gBAClC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE;gBACjC,CAAC,CAAC,EAAE,CAAC,CACV,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,UAAU,EAAE;QACf,IAAI,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,gBAAgB,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAGD,KAAK,UAAU,OAAO;QACpB,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,UAAU,IAAI,CAAC,EAAE,gCAAgC,CAC7E,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACjE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;QACpB,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DockerComposeProjectOptions {
|
|
2
|
+
env?: Record<string, string>;
|
|
3
|
+
projectName?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class DockerComposeProject {
|
|
6
|
+
private readonly composeFile;
|
|
7
|
+
private readonly projectName;
|
|
8
|
+
private readonly env?;
|
|
9
|
+
private constructor();
|
|
10
|
+
static start(composeFile: string, options?: DockerComposeProjectOptions): Promise<DockerComposeProject>;
|
|
11
|
+
close(): Promise<void>;
|
|
12
|
+
serialize(): unknown;
|
|
13
|
+
static deserialize(serialized: any): DockerComposeProject;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=docker-compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.d.ts","sourceRoot":"","sources":["../src/docker-compose.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,2BAA2B;IAK1C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAM7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqCD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAHvB,OAAO;WAMM,KAAK,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC;IAqB1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,SAAS,IAAI,OAAO;IAQpB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,oBAAoB;CAO1D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DockerComposeProject = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const util_1 = require("./util");
|
|
7
|
+
async function runDockerCompose(composeFile, projectName, env, args) {
|
|
8
|
+
const proc = (0, child_process_1.spawn)('docker', ['compose', '-f', composeFile, '-p', projectName, ...args], {
|
|
9
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
10
|
+
env: { ...process.env, ...env },
|
|
11
|
+
});
|
|
12
|
+
await (0, events_1.once)(proc, 'spawn');
|
|
13
|
+
(0, util_1.debug)('docker compose: spawned', { pid: proc.pid, args });
|
|
14
|
+
let stderr = '';
|
|
15
|
+
proc.stderr.setEncoding('utf8');
|
|
16
|
+
proc.stderr.on('data', (chunk) => {
|
|
17
|
+
stderr += chunk;
|
|
18
|
+
for (const line of chunk.split('\n')) {
|
|
19
|
+
if (line.trim())
|
|
20
|
+
(0, util_1.debug)('docker compose stderr:', line);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
proc.stdout.setEncoding('utf8');
|
|
24
|
+
proc.stdout.on('data', (chunk) => {
|
|
25
|
+
for (const line of chunk.split('\n')) {
|
|
26
|
+
if (line.trim())
|
|
27
|
+
(0, util_1.debug)('docker compose stdout:', line);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const [code] = await (0, events_1.once)(proc, 'exit');
|
|
31
|
+
(0, util_1.debug)('docker compose: exited', { code });
|
|
32
|
+
return { code: code, stderr };
|
|
33
|
+
}
|
|
34
|
+
class DockerComposeProject {
|
|
35
|
+
constructor(composeFile, projectName, env) {
|
|
36
|
+
this.composeFile = composeFile;
|
|
37
|
+
this.projectName = projectName;
|
|
38
|
+
this.env = env;
|
|
39
|
+
}
|
|
40
|
+
static async start(composeFile, options = {}) {
|
|
41
|
+
const projectName = options.projectName ??
|
|
42
|
+
options.env?.COMPOSE_PROJECT_NAME ??
|
|
43
|
+
`mongodb-runner-${(0, util_1.uuid)()}`;
|
|
44
|
+
(0, util_1.debug)('starting docker compose project', { composeFile, projectName });
|
|
45
|
+
const { code, stderr } = await runDockerCompose(composeFile, projectName, options.env, ['up', '-d']);
|
|
46
|
+
if (code !== 0) {
|
|
47
|
+
throw new Error(`docker compose up failed with exit code ${String(code)}: ${stderr}`);
|
|
48
|
+
}
|
|
49
|
+
(0, util_1.debug)('docker compose project started');
|
|
50
|
+
return new DockerComposeProject(composeFile, projectName, options.env);
|
|
51
|
+
}
|
|
52
|
+
async close() {
|
|
53
|
+
(0, util_1.debug)('stopping docker compose project', {
|
|
54
|
+
composeFile: this.composeFile,
|
|
55
|
+
projectName: this.projectName,
|
|
56
|
+
});
|
|
57
|
+
const { code, stderr } = await runDockerCompose(this.composeFile, this.projectName, this.env, ['down', '--volumes']);
|
|
58
|
+
if (code !== 0) {
|
|
59
|
+
(0, util_1.debug)('docker compose down failed', { code: String(code), stderr });
|
|
60
|
+
}
|
|
61
|
+
(0, util_1.debug)('docker compose project stopped');
|
|
62
|
+
}
|
|
63
|
+
serialize() {
|
|
64
|
+
return {
|
|
65
|
+
composeFile: this.composeFile,
|
|
66
|
+
projectName: this.projectName,
|
|
67
|
+
env: this.env,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
static deserialize(serialized) {
|
|
71
|
+
return new DockerComposeProject(serialized.composeFile, serialized.projectName, serialized.env);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.DockerComposeProject = DockerComposeProject;
|
|
75
|
+
//# sourceMappingURL=docker-compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-compose.js","sourceRoot":"","sources":["../src/docker-compose.ts"],"names":[],"mappings":";;;AAAA,iDAAsC;AACtC,mCAA8B;AAC9B,iCAAqC;AAgBrC,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,WAAmB,EACnB,GAAuC,EACvC,IAAc;IAEd,MAAM,IAAI,GAAG,IAAA,qBAAK,EAChB,QAAQ,EACR,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,EAC1D;QACE,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QAClC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;KAChC,CACF,CAAC;IACF,MAAM,IAAA,aAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1B,IAAA,YAAK,EAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,IAAA,YAAK,EAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,EAAE;gBAAE,IAAA,YAAK,EAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAA,aAAI,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAA,YAAK,EAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,EAAE,IAAqB,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AAED,MAAa,oBAAoB;IAC/B,YACmB,WAAmB,EACnB,WAAmB,EACnB,GAA4B;QAF5B,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;QACnB,QAAG,GAAH,GAAG,CAAyB;IAC5C,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,WAAmB,EACnB,UAAuC,EAAE;QAEzC,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,GAAG,EAAE,oBAAoB;YACjC,kBAAkB,IAAA,WAAI,GAAE,EAAE,CAAC;QAC7B,IAAA,YAAK,EAAC,iCAAiC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAC7C,WAAW,EACX,WAAW,EACX,OAAO,CAAC,GAAG,EACX,CAAC,IAAI,EAAE,IAAI,CAAC,CACb,CAAC;QACF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,IAAA,YAAK,EAAC,gCAAgC,CAAC,CAAC;QACxC,OAAO,IAAI,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAA,YAAK,EAAC,iCAAiC,EAAE;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAC7C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,GAAG,EACR,CAAC,MAAM,EAAE,WAAW,CAAC,CACtB,CAAC;QACF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,IAAA,YAAK,EAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAA,YAAK,EAAC,gCAAgC,CAAC,CAAC;IAC1C,CAAC;IAED,SAAS;QACP,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,UAAe;QAChC,OAAO,IAAI,oBAAoB,CAC7B,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,GAAG,CACf,CAAC;IACJ,CAAC;CACF;AA/DD,oDA+DC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { MongoServer, type MongoServerEvents, MongoServerOptions, } from './mongoserver';
|
|
2
|
-
export { MongoCluster, type MongoClusterEvents, MongoClusterOptions, MongoDBUserDoc, RSMemberOptions as MongoClusterRSMemberOptions, RSOptions as MongoClusterRSOptions, CommonOptions as MongoClusterCommonOptions, ShardedOptions as MongoClusterShardedOptions, } from './mongocluster';
|
|
2
|
+
export { MongoCluster, type MongoClusterEvents, MongoClusterOptions, MongoDBUserDoc, RSMemberOptions as MongoClusterRSMemberOptions, RSOptions as MongoClusterRSOptions, CommonOptions as MongoClusterCommonOptions, ShardedOptions as MongoClusterShardedOptions, type ShardDescriptor, type DisaggregatedStorageOptions, } from './mongocluster';
|
|
3
|
+
export { createSLSMultiCellEnvironment, createSLSDisaggregatedStorageConfig, createSLSDisaggregatedStorageOptions, type SLSDisaggregatedStorageConfigOptions, type SLSDisaggregatedStorageSetupOptions, parseSLSComposeServices, SLS_HOSTNAME, SLS_CELL1, SLS_CELL2, SLS_CELL3, type SLSCell, type SLSServiceInfo, type SLSMultiCellEnvironment, type SLSMultiCellEnvironmentOptions, } from './sls';
|
|
4
|
+
export { DockerComposeProject, type DockerComposeProjectOptions, } from './docker-compose';
|
|
3
5
|
export type { LogEntry } from './mongologreader';
|
|
4
6
|
export type { ConnectionString } from 'mongodb-connection-string-url';
|
|
5
7
|
export { prune, start, stop, exec, instances } from './runner-helpers';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,cAAc,EACd,eAAe,IAAI,2BAA2B,EAC9C,SAAS,IAAI,qBAAqB,EAClC,aAAa,IAAI,yBAAyB,EAC1C,cAAc,IAAI,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,cAAc,EACd,eAAe,IAAI,2BAA2B,EAC9C,SAAS,IAAI,qBAAqB,EAClC,aAAa,IAAI,yBAAyB,EAC1C,cAAc,IAAI,0BAA0B,EAC5C,KAAK,eAAe,EACpB,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,6BAA6B,EAC7B,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,oCAAoC,EACzC,KAAK,mCAAmC,EACxC,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,GACpC,MAAM,OAAO,CAAC;AACf,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instances = exports.exec = exports.start = exports.prune = exports.MongoCluster = exports.MongoServer = void 0;
|
|
3
|
+
exports.instances = exports.exec = exports.start = exports.prune = exports.DockerComposeProject = exports.SLS_CELL3 = exports.SLS_CELL2 = exports.SLS_CELL1 = exports.SLS_HOSTNAME = exports.parseSLSComposeServices = exports.createSLSDisaggregatedStorageOptions = exports.createSLSDisaggregatedStorageConfig = exports.createSLSMultiCellEnvironment = exports.MongoCluster = exports.MongoServer = void 0;
|
|
4
4
|
var mongoserver_1 = require("./mongoserver");
|
|
5
5
|
Object.defineProperty(exports, "MongoServer", { enumerable: true, get: function () { return mongoserver_1.MongoServer; } });
|
|
6
6
|
var mongocluster_1 = require("./mongocluster");
|
|
7
7
|
Object.defineProperty(exports, "MongoCluster", { enumerable: true, get: function () { return mongocluster_1.MongoCluster; } });
|
|
8
|
+
var sls_1 = require("./sls");
|
|
9
|
+
Object.defineProperty(exports, "createSLSMultiCellEnvironment", { enumerable: true, get: function () { return sls_1.createSLSMultiCellEnvironment; } });
|
|
10
|
+
Object.defineProperty(exports, "createSLSDisaggregatedStorageConfig", { enumerable: true, get: function () { return sls_1.createSLSDisaggregatedStorageConfig; } });
|
|
11
|
+
Object.defineProperty(exports, "createSLSDisaggregatedStorageOptions", { enumerable: true, get: function () { return sls_1.createSLSDisaggregatedStorageOptions; } });
|
|
12
|
+
Object.defineProperty(exports, "parseSLSComposeServices", { enumerable: true, get: function () { return sls_1.parseSLSComposeServices; } });
|
|
13
|
+
Object.defineProperty(exports, "SLS_HOSTNAME", { enumerable: true, get: function () { return sls_1.SLS_HOSTNAME; } });
|
|
14
|
+
Object.defineProperty(exports, "SLS_CELL1", { enumerable: true, get: function () { return sls_1.SLS_CELL1; } });
|
|
15
|
+
Object.defineProperty(exports, "SLS_CELL2", { enumerable: true, get: function () { return sls_1.SLS_CELL2; } });
|
|
16
|
+
Object.defineProperty(exports, "SLS_CELL3", { enumerable: true, get: function () { return sls_1.SLS_CELL3; } });
|
|
17
|
+
var docker_compose_1 = require("./docker-compose");
|
|
18
|
+
Object.defineProperty(exports, "DockerComposeProject", { enumerable: true, get: function () { return docker_compose_1.DockerComposeProject; } });
|
|
8
19
|
var runner_helpers_1 = require("./runner-helpers");
|
|
9
20
|
Object.defineProperty(exports, "prune", { enumerable: true, get: function () { return runner_helpers_1.prune; } });
|
|
10
21
|
Object.defineProperty(exports, "start", { enumerable: true, get: function () { return runner_helpers_1.start; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAIuB;AAHrB,0GAAA,WAAW,OAAA;AAIb,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAIuB;AAHrB,0GAAA,WAAW,OAAA;AAIb,+CAWwB;AAVtB,4GAAA,YAAY,OAAA;AAWd,6BAee;AAdb,oHAAA,6BAA6B,OAAA;AAC7B,0HAAA,mCAAmC,OAAA;AACnC,2HAAA,oCAAoC,OAAA;AAGpC,8GAAA,uBAAuB,OAAA;AACvB,mGAAA,YAAY,OAAA;AACZ,gGAAA,SAAS,OAAA;AACT,gGAAA,SAAS,OAAA;AACT,gGAAA,SAAS,OAAA;AAMX,mDAG0B;AAFxB,sHAAA,oBAAoB,OAAA;AAKtB,mDAAuE;AAA9D,uGAAA,KAAK,OAAA;AAAE,uGAAA,KAAK,OAAA;AAAE,sGAAA,IAAI,OAAA;AAAE,sGAAA,IAAI,OAAA;AAAE,2GAAA,SAAS,OAAA"}
|
package/dist/mongocluster.d.ts
CHANGED
|
@@ -25,10 +25,12 @@ export interface CommonOptions {
|
|
|
25
25
|
downloadOptions?: DownloadOptions;
|
|
26
26
|
oidc?: string;
|
|
27
27
|
version?: string;
|
|
28
|
+
downloadUrl?: string;
|
|
28
29
|
users?: MongoDBUserDoc[];
|
|
29
30
|
tlsAddClientKey?: boolean;
|
|
30
31
|
requireApiVersion?: number;
|
|
31
32
|
topology: 'standalone' | 'replset' | 'sharded';
|
|
33
|
+
disaggregatedStorage?: DisaggregatedStorageOptions;
|
|
32
34
|
}
|
|
33
35
|
export type RSOptions = {
|
|
34
36
|
arbiters?: number;
|
|
@@ -39,6 +41,25 @@ export type ShardedOptions = {
|
|
|
39
41
|
mongosArgs?: string[][];
|
|
40
42
|
shards?: number | Partial<MongoClusterOptions>[];
|
|
41
43
|
};
|
|
44
|
+
export interface ShardMemberDescriptor {
|
|
45
|
+
host: string;
|
|
46
|
+
port: number;
|
|
47
|
+
priority: number;
|
|
48
|
+
arbiterOnly: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ShardDescriptor {
|
|
51
|
+
index: number;
|
|
52
|
+
isConfigServer: boolean;
|
|
53
|
+
replSetName?: string;
|
|
54
|
+
members: ShardMemberDescriptor[];
|
|
55
|
+
}
|
|
56
|
+
export interface DisaggregatedStorageOptions {
|
|
57
|
+
composeFile: string;
|
|
58
|
+
env?: Record<string, string>;
|
|
59
|
+
config: string | Record<string, unknown> | ((shard: ShardDescriptor) => string | Record<string, unknown>);
|
|
60
|
+
waitForReady?: () => Promise<void>;
|
|
61
|
+
setupShard?: (shard: ShardDescriptor) => Promise<void>;
|
|
62
|
+
}
|
|
42
63
|
export type MongoClusterOptions = Pick<MongoServerOptions, 'logDir' | 'tmpDir' | 'args' | 'binDir' | 'docker' | 'internalClientOptions' | 'host' | 'detached'> & CommonOptions & RSOptions & ShardedOptions;
|
|
43
64
|
export type MongoClusterEvents = {
|
|
44
65
|
[k in keyof MongoServerEvents]: [serverUUID: string, ...MongoServerEvents[k]];
|
|
@@ -52,6 +73,7 @@ export declare class MongoCluster extends EventEmitter<MongoClusterEvents> {
|
|
|
52
73
|
private servers;
|
|
53
74
|
private shards;
|
|
54
75
|
private oidcMockProviderProcess?;
|
|
76
|
+
private dockerComposeProject?;
|
|
55
77
|
private defaultConnectionOptions;
|
|
56
78
|
private users;
|
|
57
79
|
private constructor();
|
|
@@ -65,7 +87,9 @@ export declare class MongoCluster extends EventEmitter<MongoClusterEvents> {
|
|
|
65
87
|
get connectionStringUrl(): ConnectionString;
|
|
66
88
|
get serverVersion(): string;
|
|
67
89
|
get serverVariant(): 'enterprise' | 'community';
|
|
68
|
-
static start(
|
|
90
|
+
static start(options: MongoClusterOptions): Promise<MongoCluster>;
|
|
91
|
+
private static _start;
|
|
92
|
+
private static _startServers;
|
|
69
93
|
private children;
|
|
70
94
|
private allServers;
|
|
71
95
|
assertAllServersHaveInsertedLocalMetadata(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongocluster.d.ts","sourceRoot":"","sources":["../src/mongocluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,MAAM,EACN,oBAAoB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mongocluster.d.ts","sourceRoot":"","sources":["../src/mongocluster.ts"],"names":[],"mappings":"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"}
|
package/dist/mongocluster.js
CHANGED
|
@@ -10,6 +10,7 @@ const mongodb_downloader_1 = require("@mongodb-js/mongodb-downloader");
|
|
|
10
10
|
const mongodb_1 = require("mongodb");
|
|
11
11
|
const util_1 = require("./util");
|
|
12
12
|
const oidc_1 = require("./oidc");
|
|
13
|
+
const docker_compose_1 = require("./docker-compose");
|
|
13
14
|
const events_1 = require("events");
|
|
14
15
|
const assert_1 = __importDefault(require("assert"));
|
|
15
16
|
const tls_helpers_1 = require("./tls-helpers");
|
|
@@ -65,6 +66,29 @@ function processRSMembers(options) {
|
|
|
65
66
|
replSetName,
|
|
66
67
|
};
|
|
67
68
|
}
|
|
69
|
+
function buildDisaggregatedArgs(ds, shard, baseArgs) {
|
|
70
|
+
const raw = typeof ds.config === 'function' ? ds.config(shard) : ds.config;
|
|
71
|
+
const value = typeof raw === 'string' ? raw : JSON.stringify(raw);
|
|
72
|
+
return [
|
|
73
|
+
...baseArgs,
|
|
74
|
+
'--setParameter',
|
|
75
|
+
`disaggregatedStorageConfig=${value}`,
|
|
76
|
+
'--setParameter',
|
|
77
|
+
'disaggregatedStorageEnabled=true',
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
function stripPortArg(args) {
|
|
81
|
+
return removePortArg(args).filter((arg) => arg !== '--port');
|
|
82
|
+
}
|
|
83
|
+
function getPortArg(args) {
|
|
84
|
+
if (!args)
|
|
85
|
+
return undefined;
|
|
86
|
+
const splitArgIndex = args.indexOf('--port');
|
|
87
|
+
if (splitArgIndex !== -1)
|
|
88
|
+
return +args[splitArgIndex + 1] || undefined;
|
|
89
|
+
const arg = args.find((a) => a.startsWith('--port='));
|
|
90
|
+
return arg ? +arg.split('=')[1] || undefined : undefined;
|
|
91
|
+
}
|
|
68
92
|
function processShardOptions(options) {
|
|
69
93
|
const shards = typeof options.shards === 'number' || !options.shards
|
|
70
94
|
? (0, util_1.range)((options.shards ?? 3) + 1).map(() => ({}))
|
|
@@ -110,12 +134,13 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
110
134
|
}
|
|
111
135
|
});
|
|
112
136
|
}
|
|
113
|
-
static downloadMongoDb(tmpdir, targetVersionSemverSpecifier, options) {
|
|
137
|
+
static downloadMongoDb(tmpdir, targetVersionSemverSpecifier, options, downloadUrl) {
|
|
114
138
|
return (0, mongodb_downloader_1.downloadMongoDb)({
|
|
115
139
|
directory: tmpdir,
|
|
116
140
|
version: targetVersionSemverSpecifier,
|
|
117
141
|
downloadOptions: options,
|
|
118
142
|
useLockfile: true,
|
|
143
|
+
downloadUrl,
|
|
119
144
|
});
|
|
120
145
|
}
|
|
121
146
|
serialize() {
|
|
@@ -125,13 +150,14 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
125
150
|
servers: this.servers.map((srv) => srv.serialize()),
|
|
126
151
|
shards: this.shards.map((shard) => shard.serialize()),
|
|
127
152
|
oidcMockProviderProcess: this.oidcMockProviderProcess?.serialize(),
|
|
153
|
+
dockerComposeProject: this.dockerComposeProject?.serialize(),
|
|
128
154
|
defaultConnectionOptions: (0, util_1.jsonClone)(this.defaultConnectionOptions ?? {}),
|
|
129
155
|
users: (0, util_1.jsonClone)(this.users),
|
|
130
156
|
};
|
|
131
157
|
}
|
|
132
158
|
isClosed() {
|
|
133
159
|
for (const _ of this.children())
|
|
134
|
-
return
|
|
160
|
+
return false;
|
|
135
161
|
return true;
|
|
136
162
|
}
|
|
137
163
|
static async deserialize(serialized) {
|
|
@@ -145,6 +171,9 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
145
171
|
cluster.oidcMockProviderProcess = serialized.oidcMockProviderProcess
|
|
146
172
|
? oidc_1.OIDCMockProviderProcess.deserialize(serialized.oidcMockProviderProcess)
|
|
147
173
|
: undefined;
|
|
174
|
+
cluster.dockerComposeProject = serialized.dockerComposeProject
|
|
175
|
+
? docker_compose_1.DockerComposeProject.deserialize(serialized.dockerComposeProject)
|
|
176
|
+
: undefined;
|
|
148
177
|
return cluster;
|
|
149
178
|
}
|
|
150
179
|
get hostport() {
|
|
@@ -165,14 +194,19 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
165
194
|
get serverVariant() {
|
|
166
195
|
return this.servers[0].serverVariant;
|
|
167
196
|
}
|
|
168
|
-
static async start(
|
|
197
|
+
static async start(options) {
|
|
198
|
+
return await MongoCluster._start(options, undefined);
|
|
199
|
+
}
|
|
200
|
+
static async _start({ ...options }, parentClusterContext) {
|
|
169
201
|
options = { ...options, ...(await (0, tls_helpers_1.handleTLSClientKeyOptions)(options)) };
|
|
170
202
|
const cluster = new MongoCluster();
|
|
171
203
|
cluster.topology = options.topology;
|
|
172
204
|
cluster.users = options.users ?? [];
|
|
173
205
|
cluster.defaultConnectionOptions = { ...options.internalClientOptions };
|
|
174
206
|
if (!options.binDir) {
|
|
175
|
-
options.binDir = await this.downloadMongoDb(options.downloadDir ??
|
|
207
|
+
options.binDir = await this.downloadMongoDb(options.downloadDir ??
|
|
208
|
+
process.env.MONGODB_RUNNER_DOWNLOAD_DIR ??
|
|
209
|
+
options.tmpDir, options.version, options.downloadOptions, options.downloadUrl);
|
|
176
210
|
}
|
|
177
211
|
if (options.oidc !== undefined) {
|
|
178
212
|
cluster.oidcMockProviderProcess = await oidc_1.OIDCMockProviderProcess.start(options.oidc || '--port=0');
|
|
@@ -196,7 +230,62 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
196
230
|
'enableTestCommands=true',
|
|
197
231
|
];
|
|
198
232
|
}
|
|
233
|
+
let disaggregatedStorage = parentClusterContext?.disaggregatedStorage;
|
|
234
|
+
if (!disaggregatedStorage && options.disaggregatedStorage) {
|
|
235
|
+
disaggregatedStorage = options.disaggregatedStorage;
|
|
236
|
+
delete options.disaggregatedStorage;
|
|
237
|
+
cluster.dockerComposeProject = await docker_compose_1.DockerComposeProject.start(disaggregatedStorage.composeFile, { env: disaggregatedStorage.env });
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
if (disaggregatedStorage) {
|
|
241
|
+
if (cluster.dockerComposeProject) {
|
|
242
|
+
await disaggregatedStorage.waitForReady?.();
|
|
243
|
+
}
|
|
244
|
+
if (options.secondaries === undefined)
|
|
245
|
+
options.secondaries = 1;
|
|
246
|
+
}
|
|
247
|
+
return await this._startServers(cluster, options, disaggregatedStorage, parentClusterContext?.shardContext ?? {
|
|
248
|
+
index: 0,
|
|
249
|
+
isConfigServer: false,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
if (cluster.dockerComposeProject) {
|
|
254
|
+
try {
|
|
255
|
+
await cluster.dockerComposeProject.close();
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
static async _startServers(cluster, options, disaggregatedStorage, shardContext) {
|
|
199
264
|
if (options.topology === 'standalone') {
|
|
265
|
+
if (disaggregatedStorage) {
|
|
266
|
+
let port = getPortArg(options.args);
|
|
267
|
+
if (!port) {
|
|
268
|
+
port = await (0, util_1.allocatePort)();
|
|
269
|
+
options.args = [
|
|
270
|
+
...stripPortArg(options.args ?? []),
|
|
271
|
+
'--port',
|
|
272
|
+
String(port),
|
|
273
|
+
];
|
|
274
|
+
}
|
|
275
|
+
const descriptor = {
|
|
276
|
+
...shardContext,
|
|
277
|
+
members: [
|
|
278
|
+
{
|
|
279
|
+
host: options.host ?? '127.0.0.1',
|
|
280
|
+
port,
|
|
281
|
+
priority: 1,
|
|
282
|
+
arbiterOnly: false,
|
|
283
|
+
},
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
await disaggregatedStorage.setupShard?.(descriptor);
|
|
287
|
+
options.args = buildDisaggregatedArgs(disaggregatedStorage, descriptor, options.args ?? []);
|
|
288
|
+
}
|
|
200
289
|
cluster.servers.push(await mongoserver_1.MongoServer.start({
|
|
201
290
|
...options,
|
|
202
291
|
binary: 'mongod',
|
|
@@ -204,6 +293,35 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
204
293
|
}
|
|
205
294
|
else if (options.topology === 'replset') {
|
|
206
295
|
const { rsMembers, replSetName } = processRSMembers(options);
|
|
296
|
+
if (disaggregatedStorage) {
|
|
297
|
+
const members = [];
|
|
298
|
+
for (const member of rsMembers) {
|
|
299
|
+
let port = getPortArg(member.args);
|
|
300
|
+
if (!port) {
|
|
301
|
+
port = await (0, util_1.allocatePort)();
|
|
302
|
+
member.args = [
|
|
303
|
+
...stripPortArg(member.args ?? []),
|
|
304
|
+
'--port',
|
|
305
|
+
String(port),
|
|
306
|
+
];
|
|
307
|
+
}
|
|
308
|
+
members.push({
|
|
309
|
+
host: options.host ?? '127.0.0.1',
|
|
310
|
+
port,
|
|
311
|
+
priority: member.priority ?? 0,
|
|
312
|
+
arbiterOnly: member.arbiterOnly ?? false,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
const descriptor = {
|
|
316
|
+
...shardContext,
|
|
317
|
+
replSetName,
|
|
318
|
+
members,
|
|
319
|
+
};
|
|
320
|
+
await disaggregatedStorage.setupShard?.(descriptor);
|
|
321
|
+
for (const member of rsMembers) {
|
|
322
|
+
member.args = buildDisaggregatedArgs(disaggregatedStorage, descriptor, member.args ?? []);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
207
325
|
(0, util_1.debug)('Starting replica set nodes', {
|
|
208
326
|
replSetName,
|
|
209
327
|
secondaries: rsMembers.filter((m) => !m.arbiterOnly).length - 1,
|
|
@@ -225,24 +343,26 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
225
343
|
cluster.servers.push(...nodes.map(([srv]) => srv));
|
|
226
344
|
const primary = cluster.servers[primaryIndex];
|
|
227
345
|
await primary.withClient(async (client) => {
|
|
228
|
-
(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
346
|
+
if (!disaggregatedStorage) {
|
|
347
|
+
(0, util_1.debug)('Running rs.initiate');
|
|
348
|
+
const rsConf = {
|
|
349
|
+
_id: replSetName,
|
|
350
|
+
configsvr: rsMembers.some((m) => m.args?.includes('--configsvr')),
|
|
351
|
+
members: nodes.map(([srv, member], i) => {
|
|
352
|
+
return {
|
|
353
|
+
_id: i,
|
|
354
|
+
host: srv.hostport,
|
|
355
|
+
arbiterOnly: member.arbiterOnly ?? false,
|
|
356
|
+
priority: member.priority ?? (i === primaryIndex ? 1 : 0),
|
|
357
|
+
tags: member.tags || {},
|
|
358
|
+
};
|
|
359
|
+
}),
|
|
360
|
+
};
|
|
361
|
+
(0, util_1.debugVerbose)('replSetInitiate:', rsConf);
|
|
362
|
+
await client.db('admin').command({
|
|
363
|
+
replSetInitiate: rsConf,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
246
366
|
for (let i = 0; i < 60; i++) {
|
|
247
367
|
const status = await client.db('admin').command({
|
|
248
368
|
replSetGetStatus: 1,
|
|
@@ -260,16 +380,19 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
260
380
|
else if (options.topology === 'sharded') {
|
|
261
381
|
const { shards, mongosArgs } = processShardOptions(options);
|
|
262
382
|
(0, util_1.debug)('starting config server and shard servers', shards);
|
|
263
|
-
const allShards = await (0, util_1.safePromiseAll)(shards.map(async (s) => {
|
|
264
|
-
const
|
|
265
|
-
const
|
|
383
|
+
const allShards = await (0, util_1.safePromiseAll)(shards.map(async (s, i) => {
|
|
384
|
+
const isConfigServer = s.args?.includes('--configsvr') ?? false;
|
|
385
|
+
const shardCluster = await MongoCluster._start({
|
|
266
386
|
...options,
|
|
267
387
|
...s,
|
|
268
388
|
topology: 'replset',
|
|
269
389
|
requireApiVersion: undefined,
|
|
270
|
-
users:
|
|
390
|
+
users: isConfigServer ? undefined : options.users,
|
|
391
|
+
}, {
|
|
392
|
+
disaggregatedStorage,
|
|
393
|
+
shardContext: { index: i, isConfigServer },
|
|
271
394
|
});
|
|
272
|
-
return [
|
|
395
|
+
return [shardCluster, isConfigServer];
|
|
273
396
|
}));
|
|
274
397
|
const configsvr = allShards.find(([, isConfig]) => isConfig)[0];
|
|
275
398
|
const shardsvrs = allShards
|
|
@@ -370,6 +493,7 @@ class MongoCluster extends events_1.EventEmitter {
|
|
|
370
493
|
}
|
|
371
494
|
async close() {
|
|
372
495
|
await (0, util_1.safePromiseAll)([...this.children(), this.oidcMockProviderProcess].map((closable) => closable?.close()));
|
|
496
|
+
await this.dockerComposeProject?.close();
|
|
373
497
|
this.servers = [];
|
|
374
498
|
this.shards = [];
|
|
375
499
|
}
|