-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
151 lines (123 loc) · 3.38 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
"use strict";
const fs = require("fs");
const fse = require("fs-extra");
const { Select, Input, MultiSelect } = require("enquirer");
const generator = require("generate-password");
const {
EXPERIENCES,
PLUGINS_WITH_EXPERIENCE,
PLUGINS
} = require("./constants");
const { deployDbs, erxesUp } = require("./deployer");
const { execCommand } = require("./utils");
const generatePass = () =>
generator.generate({
length: 10,
numbers: true
});
const installAndDeployment = async () => {
const configs = {
domain: "",
jwt_token_secret: generatePass(),
essyncer: {},
redis: {
password: generatePass()
},
installer: {},
elasticsearch: {},
mongo: {
username: "erxes",
password: generatePass(),
replication: true
},
rabbitmq: {
cookie: "",
user: "erxes",
pass: generatePass(),
vhost: ""
}
};
const domain = await new Input({
message: "Please enter your domain: ",
initial: "example.erxes.io",
required: true
}).run();
configs.domain = domain;
const version = await new Select({
message: "Select release: ",
choices: ["2.0.3", "2.0.2", "2.0.1"]
}).run();
configs.image_tag = version;
const installTypeSelect = new Select({
message: "Select installation type: ",
choices: ["Choose Experience", "Choose Plugins"]
});
const installType = await installTypeSelect.run();
if (installType === "Choose Experience") {
const experience = await new Select({
message: "Select experience type: ",
choices: EXPERIENCES
}).run();
configs.plugins = PLUGINS_WITH_EXPERIENCE[experience];
}
if (installType === "Choose Plugins") {
const chosenPlugins = await new MultiSelect({
message: "Select plugins to install (use space to check): ",
choices: PLUGINS
}).run();
configs.plugins = chosenPlugins.map(plugin => {
return { name: plugin };
});
}
await deployDbs();
await erxesUp();
fs.writeFileSync("configs.json", JSON.stringify(configs, null, 4));
};
const installAndRemovePlugins = async () => {
const configs = await fse.readJSON(filePath("configs.json"));
const action = await new Select({
message: "Which action do you want: ",
choices: ["Install new plugins", "Uninstall plugins"]
}).run();
if (action === "Install new plugins") {
const chosenPlugins = await new MultiSelect({
message: "Select plugins to install (use space to check): ",
choices: PLUGINS
}).run();
configs.plugins = chosenPlugins.map(plugin => {
return { name: plugin };
});
}
if (action === "Uninstall plugins") {
const chosenPlugins = await new MultiSelect({
message: "Select plugins to uninstall (use space to check): ",
choices: PLUGINS
}).run();
configs.plugins = chosenPlugins.map(plugin => {
return { name: plugin };
});
}
await execCommand("docker stack rm erxes");
await erxesUp();
};
const main = async () => {
const actionSelect = new Select({
message: "Select a Action you want to perform:",
choices: [
"Deployment",
"Install & Remove plugins",
"Start",
"Stop",
"Restart",
"View Logs"
]
});
const answer = await actionSelect.run();
switch (answer) {
case "Deployment":
return installAndDeployment();
case "Install & Remove plugins":
return installAndRemovePlugins();
}
};
main();