2020-12-02 07:35:26 +00:00
|
|
|
|
2022-12-21 13:17:50 +00:00
|
|
|
const Myt = require('./myt');
|
2022-12-21 12:34:17 +00:00
|
|
|
const Command = require('./lib/command');
|
|
|
|
const Container = require('./lib/docker').Container;
|
|
|
|
const Server = require('./lib/server');
|
2022-12-21 13:17:50 +00:00
|
|
|
const Run = require('./myt-run');
|
2020-12-02 07:35:26 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Does the minium effort to start the database container, if it doesn't
|
|
|
|
* exists calls the run command, if it is started does nothing. Keep in
|
|
|
|
* mind that when you do not rebuild the docker you may be using an outdated
|
|
|
|
* version of it.
|
|
|
|
*/
|
2022-12-21 12:34:17 +00:00
|
|
|
class Start extends Command {
|
|
|
|
static usage = {
|
|
|
|
description: 'Start local database server container'
|
|
|
|
};
|
2021-10-25 13:38:07 +00:00
|
|
|
|
2022-12-21 13:17:50 +00:00
|
|
|
async run(myt, opts) {
|
2020-12-04 09:15:29 +00:00
|
|
|
const ct = new Container(opts.code);
|
2020-12-02 07:35:26 +00:00
|
|
|
let status;
|
2020-12-04 09:15:29 +00:00
|
|
|
|
2020-12-02 07:35:26 +00:00
|
|
|
try {
|
2020-12-04 09:15:29 +00:00
|
|
|
status = await ct.inspect({
|
|
|
|
format: '{{json .State.Status}}'
|
2020-12-02 07:35:26 +00:00
|
|
|
});
|
|
|
|
} catch (err) {
|
2020-12-04 09:15:29 +00:00
|
|
|
const run = new Run()
|
2022-12-21 13:17:50 +00:00
|
|
|
return await run.run(myt, opts);
|
2020-12-02 07:35:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
switch (status) {
|
|
|
|
case 'running':
|
2020-12-04 09:15:29 +00:00
|
|
|
break;
|
2020-12-02 07:35:26 +00:00
|
|
|
case 'exited':
|
2020-12-04 09:15:29 +00:00
|
|
|
await ct.start();
|
|
|
|
break;
|
2020-12-02 07:35:26 +00:00
|
|
|
default:
|
|
|
|
throw new Error(`Unknown docker status: ${status}`);
|
|
|
|
}
|
2020-12-04 09:15:29 +00:00
|
|
|
|
|
|
|
const server = new Server(ct, opts.dbConfig);
|
|
|
|
await server.wait();
|
|
|
|
return server;
|
2020-12-02 07:35:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = Start;
|
|
|
|
|
|
|
|
if (require.main === module)
|
2022-12-21 13:17:50 +00:00
|
|
|
new Myt().run(Start);
|