@dokploy/cli 0.2.3 → 0.2.5
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/LICENSE.md +21 -0
- package/dist/commands/app/create.d.ts +4 -0
- package/dist/commands/app/create.js +87 -37
- package/dist/commands/app/delete.d.ts +2 -0
- package/dist/commands/app/delete.js +50 -28
- package/dist/commands/app/deploy.d.ts +5 -0
- package/dist/commands/app/deploy.js +93 -55
- package/dist/commands/app/stop.d.ts +5 -0
- package/dist/commands/app/stop.js +87 -54
- package/dist/commands/database/mariadb/create.d.ts +9 -0
- package/dist/commands/database/mariadb/create.js +160 -66
- package/dist/commands/database/mariadb/delete.d.ts +2 -0
- package/dist/commands/database/mariadb/delete.js +56 -47
- package/dist/commands/database/mariadb/deploy.d.ts +5 -0
- package/dist/commands/database/mariadb/deploy.js +88 -54
- package/dist/commands/database/mariadb/stop.d.ts +5 -0
- package/dist/commands/database/mariadb/stop.js +88 -54
- package/dist/commands/database/mongo/create.d.ts +8 -0
- package/dist/commands/database/mongo/create.js +145 -76
- package/dist/commands/database/mongo/delete.d.ts +2 -0
- package/dist/commands/database/mongo/delete.js +56 -45
- package/dist/commands/database/mongo/deploy.d.ts +5 -0
- package/dist/commands/database/mongo/deploy.js +88 -54
- package/dist/commands/database/mongo/stop.d.ts +5 -0
- package/dist/commands/database/mongo/stop.js +88 -54
- package/dist/commands/database/mysql/create.d.ts +9 -0
- package/dist/commands/database/mysql/create.js +168 -81
- package/dist/commands/database/mysql/delete.d.ts +2 -0
- package/dist/commands/database/mysql/delete.js +56 -47
- package/dist/commands/database/mysql/deploy.js +70 -53
- package/dist/commands/database/mysql/stop.js +70 -53
- package/dist/commands/database/postgres/create.d.ts +8 -0
- package/dist/commands/database/postgres/create.js +155 -76
- package/dist/commands/database/postgres/delete.d.ts +2 -0
- package/dist/commands/database/postgres/delete.js +56 -44
- package/dist/commands/database/postgres/deploy.d.ts +5 -0
- package/dist/commands/database/postgres/deploy.js +90 -56
- package/dist/commands/database/postgres/stop.d.ts +5 -0
- package/dist/commands/database/postgres/stop.js +91 -57
- package/dist/commands/database/redis/create.d.ts +6 -0
- package/dist/commands/database/redis/create.js +129 -65
- package/dist/commands/database/redis/delete.d.ts +2 -0
- package/dist/commands/database/redis/delete.js +60 -50
- package/dist/commands/database/redis/deploy.d.ts +5 -0
- package/dist/commands/database/redis/deploy.js +90 -56
- package/dist/commands/database/redis/stop.d.ts +5 -0
- package/dist/commands/database/redis/stop.js +91 -57
- package/dist/commands/env/pull.d.ts +10 -0
- package/dist/commands/env/pull.js +68 -0
- package/dist/commands/env/push.d.ts +10 -0
- package/dist/commands/env/push.js +106 -0
- package/dist/commands/project/create.d.ts +2 -1
- package/dist/commands/project/create.js +53 -34
- package/dist/utils/utils.js +9 -2
- package/oclif.manifest.json +895 -110
- package/package.json +3 -2
- package/{README.md → readme.md} +16 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Command } from "@oclif/core";
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
2
|
import { readAuthConfig } from "../../../utils/utils.js";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { getProject, getProjects } from "../../../utils/shared.js";
|
|
@@ -7,63 +7,97 @@ import axios from "axios";
|
|
|
7
7
|
export default class DatabaseMongoDeploy extends Command {
|
|
8
8
|
static description = "Deploy an mongo to a project.";
|
|
9
9
|
static examples = ["$ <%= config.bin %> app deploy"];
|
|
10
|
+
static flags = {
|
|
11
|
+
projectId: Flags.string({
|
|
12
|
+
char: "p",
|
|
13
|
+
description: "ID of the project",
|
|
14
|
+
required: false,
|
|
15
|
+
}),
|
|
16
|
+
mongoId: Flags.string({
|
|
17
|
+
char: "m",
|
|
18
|
+
description: "ID of the MongoDB instance to deploy",
|
|
19
|
+
required: false,
|
|
20
|
+
}),
|
|
21
|
+
skipConfirm: Flags.boolean({
|
|
22
|
+
char: "y",
|
|
23
|
+
description: "Skip confirmation prompt",
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
10
27
|
async run() {
|
|
11
28
|
const auth = await readAuthConfig(this);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
const { flags } = await this.parse(DatabaseMongoDeploy);
|
|
30
|
+
let { projectId, mongoId } = flags;
|
|
31
|
+
// Modo interactivo si no se proporcionan los flags necesarios
|
|
32
|
+
if (!projectId || !mongoId) {
|
|
33
|
+
console.log(chalk.blue.bold("\n Listing all Projects \n"));
|
|
34
|
+
const projects = await getProjects(auth, this);
|
|
35
|
+
if (!projectId) {
|
|
36
|
+
const { project } = await inquirer.prompt([
|
|
37
|
+
{
|
|
38
|
+
choices: projects.map((project) => ({
|
|
39
|
+
name: project.name,
|
|
40
|
+
value: project,
|
|
41
|
+
})),
|
|
42
|
+
message: "Select a project to deploy the MongoDB instance from:",
|
|
43
|
+
name: "project",
|
|
44
|
+
type: "list",
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
projectId = project.projectId;
|
|
48
|
+
}
|
|
49
|
+
const projectSelected = await getProject(projectId, auth, this);
|
|
50
|
+
if (projectSelected.mongo.length === 0) {
|
|
51
|
+
this.error(chalk.yellow("No MongoDB instances found in this project."));
|
|
52
|
+
}
|
|
53
|
+
if (!mongoId) {
|
|
54
|
+
const dbAnswers = await inquirer.prompt([
|
|
55
|
+
{
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
choices: projectSelected.mongo.map((db) => ({
|
|
58
|
+
name: db.name,
|
|
59
|
+
value: db.mongoId,
|
|
60
|
+
})),
|
|
61
|
+
message: "Select the MongoDB instance to deploy:",
|
|
62
|
+
name: "selectedDb",
|
|
63
|
+
type: "list",
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
mongoId = dbAnswers.selectedDb;
|
|
67
|
+
}
|
|
29
68
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const confirmAnswers = await inquirer.prompt([
|
|
44
|
-
{
|
|
45
|
-
default: false,
|
|
46
|
-
message: "Are you sure you want to deploy this mongo?",
|
|
47
|
-
name: "confirmDelete",
|
|
48
|
-
type: "confirm",
|
|
49
|
-
},
|
|
50
|
-
]);
|
|
51
|
-
if (!confirmAnswers.confirmDelete) {
|
|
52
|
-
this.error(chalk.yellow("mongo deployment cancelled."));
|
|
69
|
+
// Confirmar si no se especifica --skipConfirm
|
|
70
|
+
if (!flags.skipConfirm) {
|
|
71
|
+
const confirmAnswers = await inquirer.prompt([
|
|
72
|
+
{
|
|
73
|
+
default: false,
|
|
74
|
+
message: "Are you sure you want to deploy this MongoDB instance?",
|
|
75
|
+
name: "confirmDeploy",
|
|
76
|
+
type: "confirm",
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (!confirmAnswers.confirmDeploy) {
|
|
80
|
+
this.error(chalk.yellow("MongoDB deployment cancelled."));
|
|
81
|
+
}
|
|
53
82
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
83
|
+
try {
|
|
84
|
+
const response = await axios.post(`${auth.url}/api/trpc/mongo.deploy`, {
|
|
85
|
+
json: {
|
|
86
|
+
mongoId,
|
|
87
|
+
},
|
|
88
|
+
}, {
|
|
89
|
+
headers: {
|
|
90
|
+
Authorization: `Bearer ${auth.token}`,
|
|
91
|
+
"Content-Type": "application/json",
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
if (response.status !== 200) {
|
|
95
|
+
this.error(chalk.red("Error deploying MongoDB instance"));
|
|
96
|
+
}
|
|
97
|
+
this.log(chalk.green("MongoDB instance deployed successfully."));
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
this.error(chalk.red(`Error deploying MongoDB instance: ${error.message}`));
|
|
66
101
|
}
|
|
67
|
-
this.log(chalk.green("Mongo deploy successful."));
|
|
68
102
|
}
|
|
69
103
|
}
|
|
@@ -2,5 +2,10 @@ import { Command } from "@oclif/core";
|
|
|
2
2
|
export default class DatabaseMongoStop extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
projectId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
mongoId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
skipConfirm: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
5
10
|
run(): Promise<void>;
|
|
6
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Command } from "@oclif/core";
|
|
1
|
+
import { Command, Flags } from "@oclif/core";
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import inquirer from "inquirer";
|
|
4
4
|
import axios from "axios";
|
|
@@ -7,63 +7,97 @@ import { readAuthConfig } from "../../../utils/utils.js";
|
|
|
7
7
|
export default class DatabaseMongoStop extends Command {
|
|
8
8
|
static description = "Stop an mongo from a project.";
|
|
9
9
|
static examples = ["$ <%= config.bin %> mongo stop"];
|
|
10
|
+
static flags = {
|
|
11
|
+
projectId: Flags.string({
|
|
12
|
+
char: "p",
|
|
13
|
+
description: "ID of the project",
|
|
14
|
+
required: false,
|
|
15
|
+
}),
|
|
16
|
+
mongoId: Flags.string({
|
|
17
|
+
char: "m",
|
|
18
|
+
description: "ID of the MongoDB instance to stop",
|
|
19
|
+
required: false,
|
|
20
|
+
}),
|
|
21
|
+
skipConfirm: Flags.boolean({
|
|
22
|
+
char: "y",
|
|
23
|
+
description: "Skip confirmation prompt",
|
|
24
|
+
default: false,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
10
27
|
async run() {
|
|
11
28
|
const auth = await readAuthConfig(this);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
const { flags } = await this.parse(DatabaseMongoStop);
|
|
30
|
+
let { projectId, mongoId } = flags;
|
|
31
|
+
// Modo interactivo si no se proporcionan los flags necesarios
|
|
32
|
+
if (!projectId || !mongoId) {
|
|
33
|
+
console.log(chalk.blue.bold("\n Listing all Projects \n"));
|
|
34
|
+
const projects = await getProjects(auth, this);
|
|
35
|
+
if (!projectId) {
|
|
36
|
+
const { project } = await inquirer.prompt([
|
|
37
|
+
{
|
|
38
|
+
choices: projects.map((project) => ({
|
|
39
|
+
name: project.name,
|
|
40
|
+
value: project,
|
|
41
|
+
})),
|
|
42
|
+
message: "Select a project to stop the MongoDB instance from:",
|
|
43
|
+
name: "project",
|
|
44
|
+
type: "list",
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
projectId = project.projectId;
|
|
48
|
+
}
|
|
49
|
+
const projectSelected = await getProject(projectId, auth, this);
|
|
50
|
+
if (projectSelected.mongo.length === 0) {
|
|
51
|
+
this.error(chalk.yellow("No MongoDB instances found in this project."));
|
|
52
|
+
}
|
|
53
|
+
if (!mongoId) {
|
|
54
|
+
const dbAnswers = await inquirer.prompt([
|
|
55
|
+
{
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
choices: projectSelected.mongo.map((db) => ({
|
|
58
|
+
name: db.name,
|
|
59
|
+
value: db.mongoId,
|
|
60
|
+
})),
|
|
61
|
+
message: "Select the MongoDB instance to stop:",
|
|
62
|
+
name: "selectedDb",
|
|
63
|
+
type: "list",
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
mongoId = dbAnswers.selectedDb;
|
|
67
|
+
}
|
|
29
68
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const confirmAnswers = await inquirer.prompt([
|
|
44
|
-
{
|
|
45
|
-
default: false,
|
|
46
|
-
message: "Are you sure you want to stop this mongo?",
|
|
47
|
-
name: "confirmDelete",
|
|
48
|
-
type: "confirm",
|
|
49
|
-
},
|
|
50
|
-
]);
|
|
51
|
-
if (!confirmAnswers.confirmDelete) {
|
|
52
|
-
this.error(chalk.yellow("mongo stop cancelled."));
|
|
69
|
+
// Confirmar si no se especifica --skipConfirm
|
|
70
|
+
if (!flags.skipConfirm) {
|
|
71
|
+
const confirmAnswers = await inquirer.prompt([
|
|
72
|
+
{
|
|
73
|
+
default: false,
|
|
74
|
+
message: "Are you sure you want to stop this MongoDB instance?",
|
|
75
|
+
name: "confirmStop",
|
|
76
|
+
type: "confirm",
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (!confirmAnswers.confirmStop) {
|
|
80
|
+
this.error(chalk.yellow("MongoDB stop cancelled."));
|
|
81
|
+
}
|
|
53
82
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
83
|
+
try {
|
|
84
|
+
const response = await axios.post(`${auth.url}/api/trpc/mongo.stop`, {
|
|
85
|
+
json: {
|
|
86
|
+
mongoId,
|
|
87
|
+
},
|
|
88
|
+
}, {
|
|
89
|
+
headers: {
|
|
90
|
+
Authorization: `Bearer ${auth.token}`,
|
|
91
|
+
"Content-Type": "application/json",
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
if (response.status !== 200) {
|
|
95
|
+
this.error(chalk.red("Error stopping MongoDB instance"));
|
|
96
|
+
}
|
|
97
|
+
this.log(chalk.green("MongoDB instance stopped successfully."));
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
this.error(chalk.red(`Error stopping MongoDB instance: ${error.message}`));
|
|
66
101
|
}
|
|
67
|
-
this.log(chalk.green("Mongo stop successful."));
|
|
68
102
|
}
|
|
69
103
|
}
|
|
@@ -4,6 +4,15 @@ export default class DatabaseMysqlCreate extends Command {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
projectId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
databaseName: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
description: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
databaseRootPassword: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
databasePassword: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
databaseUser: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
dockerImage: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
+
skipConfirm: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
15
|
+
appName: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
16
|
};
|
|
8
17
|
run(): Promise<void>;
|
|
9
18
|
}
|
|
@@ -14,99 +14,186 @@ export default class DatabaseMysqlCreate extends Command {
|
|
|
14
14
|
description: "ID of the project",
|
|
15
15
|
required: false,
|
|
16
16
|
}),
|
|
17
|
+
name: Flags.string({
|
|
18
|
+
char: "n",
|
|
19
|
+
description: "Database name",
|
|
20
|
+
required: false,
|
|
21
|
+
}),
|
|
22
|
+
databaseName: Flags.string({
|
|
23
|
+
description: "MySQL database name",
|
|
24
|
+
required: false,
|
|
25
|
+
}),
|
|
26
|
+
description: Flags.string({
|
|
27
|
+
char: "d",
|
|
28
|
+
description: "Database description",
|
|
29
|
+
required: false,
|
|
30
|
+
}),
|
|
31
|
+
databaseRootPassword: Flags.string({
|
|
32
|
+
description: "Database root password",
|
|
33
|
+
required: false,
|
|
34
|
+
}),
|
|
35
|
+
databasePassword: Flags.string({
|
|
36
|
+
description: "Database password",
|
|
37
|
+
required: false,
|
|
38
|
+
}),
|
|
39
|
+
databaseUser: Flags.string({
|
|
40
|
+
description: "Database user",
|
|
41
|
+
default: "mysql",
|
|
42
|
+
}),
|
|
43
|
+
dockerImage: Flags.string({
|
|
44
|
+
description: "Docker image",
|
|
45
|
+
default: "mysql:8",
|
|
46
|
+
}),
|
|
47
|
+
skipConfirm: Flags.boolean({
|
|
48
|
+
char: "y",
|
|
49
|
+
description: "Skip confirmation prompt",
|
|
50
|
+
default: false,
|
|
51
|
+
}),
|
|
52
|
+
appName: Flags.string({
|
|
53
|
+
description: "App name",
|
|
54
|
+
required: false,
|
|
55
|
+
}),
|
|
17
56
|
};
|
|
18
57
|
async run() {
|
|
19
58
|
const auth = await readAuthConfig(this);
|
|
20
59
|
const { flags } = await this.parse(DatabaseMysqlCreate);
|
|
21
|
-
let { projectId } = flags;
|
|
22
|
-
|
|
60
|
+
let { projectId, name, databaseName, description, databaseRootPassword, databasePassword, databaseUser, dockerImage, appName } = flags;
|
|
61
|
+
// Modo interactivo si no se proporcionan los flags necesarios
|
|
62
|
+
if (!projectId || !name || !databaseName || !appName || !databasePassword || !databaseRootPassword) {
|
|
23
63
|
console.log(chalk.blue.bold("\n Listing all Projects \n"));
|
|
24
64
|
const projects = await getProjects(auth, this);
|
|
25
|
-
|
|
65
|
+
if (!projectId) {
|
|
66
|
+
const { project } = await inquirer.prompt([
|
|
67
|
+
{
|
|
68
|
+
choices: projects.map((project) => ({
|
|
69
|
+
name: project.name,
|
|
70
|
+
value: project,
|
|
71
|
+
})),
|
|
72
|
+
message: "Select a project to create the MySQL instance in:",
|
|
73
|
+
name: "project",
|
|
74
|
+
type: "list",
|
|
75
|
+
},
|
|
76
|
+
]);
|
|
77
|
+
projectId = project.projectId;
|
|
78
|
+
}
|
|
79
|
+
if (!name || !databaseName || !appName || !databasePassword || !databaseRootPassword) {
|
|
80
|
+
const dbDetails = await inquirer.prompt([
|
|
81
|
+
{
|
|
82
|
+
message: "Enter the name:",
|
|
83
|
+
name: "name",
|
|
84
|
+
type: "input",
|
|
85
|
+
validate: (input) => (input ? true : "Database name is required"),
|
|
86
|
+
default: name,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
message: "Database name:",
|
|
90
|
+
name: "databaseName",
|
|
91
|
+
type: "input",
|
|
92
|
+
validate: (input) => (input ? true : "Database name is required"),
|
|
93
|
+
default: databaseName,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
message: "Enter the database description (optional):",
|
|
97
|
+
name: "description",
|
|
98
|
+
type: "input",
|
|
99
|
+
default: description,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
message: "Database Root Password:",
|
|
103
|
+
name: "databaseRootPassword",
|
|
104
|
+
type: "password",
|
|
105
|
+
default: databaseRootPassword,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
message: "Database password:",
|
|
109
|
+
name: "databasePassword",
|
|
110
|
+
type: "password",
|
|
111
|
+
default: databasePassword,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
default: dockerImage || "mysql:8",
|
|
115
|
+
message: "Docker Image (default: mysql:8):",
|
|
116
|
+
name: "dockerImage",
|
|
117
|
+
type: "input",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
default: databaseUser || "mysql",
|
|
121
|
+
message: "Database User: (default: mysql):",
|
|
122
|
+
name: "databaseUser",
|
|
123
|
+
type: "input",
|
|
124
|
+
},
|
|
125
|
+
]);
|
|
126
|
+
name = dbDetails.name;
|
|
127
|
+
databaseName = dbDetails.databaseName;
|
|
128
|
+
description = dbDetails.description;
|
|
129
|
+
databaseRootPassword = dbDetails.databaseRootPassword;
|
|
130
|
+
databasePassword = dbDetails.databasePassword;
|
|
131
|
+
dockerImage = dbDetails.dockerImage;
|
|
132
|
+
databaseUser = dbDetails.databaseUser;
|
|
133
|
+
const appNamePrompt = await inquirer.prompt([
|
|
134
|
+
{
|
|
135
|
+
default: appName || `${slugify(name)}`,
|
|
136
|
+
message: "Enter the App name:",
|
|
137
|
+
name: "appName",
|
|
138
|
+
type: "input",
|
|
139
|
+
validate: (input) => (input ? true : "App name is required"),
|
|
140
|
+
},
|
|
141
|
+
]);
|
|
142
|
+
appName = appNamePrompt.appName;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Confirmar si no se especifica --skipConfirm
|
|
146
|
+
if (!flags.skipConfirm) {
|
|
147
|
+
const confirm = await inquirer.prompt([
|
|
26
148
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
message: "Select a project to create the MySQL database in:",
|
|
32
|
-
name: "project",
|
|
33
|
-
type: "list",
|
|
149
|
+
type: 'confirm',
|
|
150
|
+
name: 'proceed',
|
|
151
|
+
message: 'Do you want to create this MySQL instance?',
|
|
152
|
+
default: false,
|
|
34
153
|
},
|
|
35
154
|
]);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
default: "mysql:8",
|
|
67
|
-
message: "Docker Image (default: mysql:8):",
|
|
68
|
-
name: "dockerImage",
|
|
69
|
-
type: "input",
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
default: "mysql",
|
|
73
|
-
message: "Database User: (default: mysql):",
|
|
74
|
-
name: "databaseUser",
|
|
75
|
-
type: "input",
|
|
155
|
+
if (!confirm.proceed) {
|
|
156
|
+
this.error(chalk.yellow("MySQL creation cancelled."));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
console.log(JSON.stringify({
|
|
162
|
+
name,
|
|
163
|
+
databaseName,
|
|
164
|
+
description,
|
|
165
|
+
databaseRootPassword,
|
|
166
|
+
databasePassword,
|
|
167
|
+
databaseUser,
|
|
168
|
+
dockerImage,
|
|
169
|
+
appName,
|
|
170
|
+
projectId,
|
|
171
|
+
}, null, 2));
|
|
172
|
+
const response = await axios.post(`${auth.url}/api/trpc/mysql.create`, {
|
|
173
|
+
json: {
|
|
174
|
+
name,
|
|
175
|
+
databaseName,
|
|
176
|
+
description,
|
|
177
|
+
databaseRootPassword,
|
|
178
|
+
databasePassword,
|
|
179
|
+
databaseUser,
|
|
180
|
+
dockerImage,
|
|
181
|
+
appName,
|
|
182
|
+
projectId,
|
|
76
183
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
message: "Enter the App name:",
|
|
82
|
-
name: "appName",
|
|
83
|
-
type: "input",
|
|
84
|
-
validate: (input) => (input ? true : "App name is required"),
|
|
184
|
+
}, {
|
|
185
|
+
headers: {
|
|
186
|
+
Authorization: `Bearer ${auth.token}`,
|
|
187
|
+
"Content-Type": "application/json",
|
|
85
188
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
json: {
|
|
90
|
-
...dbDetails,
|
|
91
|
-
appName: appName.appName,
|
|
92
|
-
projectId: project.projectId,
|
|
93
|
-
},
|
|
94
|
-
}, {
|
|
95
|
-
headers: {
|
|
96
|
-
Authorization: `Bearer ${auth.token}`,
|
|
97
|
-
"Content-Type": "application/json",
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
if (!response.data.result.data.json) {
|
|
101
|
-
this.error(chalk.red("Error creating MySQL database"));
|
|
102
|
-
}
|
|
103
|
-
this.log(chalk.green(`MySQL database '${dbDetails.name}' created successfully.`));
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
this.error(
|
|
107
|
-
// @ts-ignore
|
|
108
|
-
chalk.red(`Failed to create MySQL database: ${error.message}`));
|
|
189
|
+
});
|
|
190
|
+
if (!response.data.result.data.json) {
|
|
191
|
+
this.error(chalk.red("Error creating MySQL instance", response.data.result.data.json));
|
|
109
192
|
}
|
|
193
|
+
this.log(chalk.green(`MySQL instance '${name}' created successfully.`));
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
this.error(chalk.red(`Error creating MySQL instance: ${error.message}`));
|
|
110
197
|
}
|
|
111
198
|
}
|
|
112
199
|
}
|
|
@@ -4,6 +4,8 @@ export default class DatabaseMysqlDelete extends Command {
|
|
|
4
4
|
static examples: string[];
|
|
5
5
|
static flags: {
|
|
6
6
|
projectId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
mysqlId: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
skipConfirm: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
9
|
};
|
|
8
10
|
run(): Promise<void>;
|
|
9
11
|
}
|