parent
328e6f3dd7
commit
25fdb7311f
9
pom.xml
9
pom.xml
|
@ -135,6 +135,11 @@
|
|||
<artifactId>httpclient5</artifactId>
|
||||
<version>5.4.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.cmcc.hy</groupId>
|
||||
<artifactId>gzs-common-oss</artifactId>
|
||||
<version>0.1.6-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
@ -236,6 +241,10 @@
|
|||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-tx</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.cmcc.hy</groupId>
|
||||
<artifactId>gzs-common-oss</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>mockwebserver</artifactId>
|
||||
|
|
|
@ -114,6 +114,14 @@ public class CommonConfigure {
|
|||
*/
|
||||
private String dataRootDirectory;
|
||||
|
||||
/**
|
||||
* 中间件部署任务执行模式。
|
||||
* <p>
|
||||
* 是否异步部署中间件,接收到部署任务后尽快返回。
|
||||
* </p>
|
||||
*/
|
||||
private boolean asyncDeployment;
|
||||
|
||||
/**
|
||||
* 设置全局静态变量的值。
|
||||
*
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.security.NoSuchAlgorithmException;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
|
@ -52,6 +53,12 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
@Resource
|
||||
private CommonConfigure commonConfigure;
|
||||
|
||||
/**
|
||||
* 根据命令获取对应的文件名。
|
||||
*
|
||||
* @param cmd 中间件管理命令
|
||||
* @return 对应的文件名
|
||||
*/
|
||||
private String getFilenameForCommand(MiddlewareManagerCommand cmd) {
|
||||
return switch (cmd) {
|
||||
case COMMAND_DEPLOYMENT -> DEPLOYMENT_FILENAME;
|
||||
|
@ -64,6 +71,14 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 将命令写入 Shell 脚本文件。
|
||||
*
|
||||
* @param workDir 工作目录
|
||||
* @param cmd 中间件管理命令
|
||||
* @param command 命令内容
|
||||
* @return 返回一个 MulReturnType 对象,其中包含写入结果的错误码和文件名
|
||||
*/
|
||||
private MulReturnType<ErrorCode, String> writeCommandToShellScript(String workDir, MiddlewareManagerCommand cmd, String command) {
|
||||
String filename = getFilenameForCommand(cmd);
|
||||
try {
|
||||
|
@ -79,6 +94,12 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建工作目录。
|
||||
*
|
||||
* @param workDir 工作目录路径
|
||||
* @return 如果创建成功, 返回 true;否则返回 false
|
||||
*/
|
||||
private boolean createWorkDirectory(String workDir) {
|
||||
Path path = Paths.get(workDir);
|
||||
if (!Files.exists(path)) {
|
||||
|
@ -91,6 +112,12 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理命令参数,并更新 MiddlewareData 对象。
|
||||
*
|
||||
* @param data 要更新的 MiddlewareData 对象
|
||||
* @param command 命令参数映射
|
||||
*/
|
||||
private void processCommands(MiddlewareData data, Map<MiddlewareManagerCommand, String> command) {
|
||||
command.forEach((cmd, param) -> {
|
||||
switch (cmd) {
|
||||
|
@ -119,6 +146,13 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存命令到 Shell 脚本文件。
|
||||
*
|
||||
* @param workDir 工作目录
|
||||
* @param command 命令参数映射
|
||||
* @return 返回一个 MulReturnType 对象,其中包含保存结果的错误码和文件名
|
||||
*/
|
||||
private MulReturnType<ErrorCode, String> saveCommands(String workDir, Map<MiddlewareManagerCommand, String> command) {
|
||||
AtomicReference<ErrorCode> errorCode = new AtomicReference<>(ErrorCode.ERR_OK);
|
||||
AtomicReference<String> filename = new AtomicReference<>("");
|
||||
|
@ -133,11 +167,18 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
return new MulReturnType<>(errorCode.get(), filename.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载并校验配置文件。
|
||||
*
|
||||
* @param workDir 工作目录
|
||||
* @param configFiles 配置文件列表
|
||||
* @return 返回一个 MulReturnType 对象,其中包含下载和校验结果的错误码和相关信息
|
||||
*/
|
||||
private MulReturnType<ErrorCode, String> downloadAndValidateConfigFiles(String workDir, List<RemoteFileDetails> configFiles) {
|
||||
for (RemoteFileDetails file : configFiles) {
|
||||
try {
|
||||
String saveName = Paths.get(workDir + File.separator + file.getFileName()).toString();
|
||||
FileDownloader dl = new FileDownloader(file.getUrl(), saveName, new FileDownloader.SimpleDownloadCallback() {
|
||||
String saveName = Paths.get(workDir + File.separator + file.getFileName()).toString();
|
||||
FileDownloader dl = new FileDownloader(file.getUrl(), saveName, new FileDownloader.SimpleDownloadCallback() {
|
||||
@Override
|
||||
public void onStart(String url) {
|
||||
}
|
||||
|
@ -163,13 +204,19 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
return new MulReturnType<>(ErrorCode.ERR_OK, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行命令。
|
||||
*
|
||||
* @param workDir 工作目录
|
||||
* @param command 命令参数映射
|
||||
*/
|
||||
private void runCommand(String workDir, Map<MiddlewareManagerCommand, String> command) {
|
||||
TreeMap<MiddlewareManagerCommand, String> sorted = new TreeMap<>(command);
|
||||
|
||||
for (MiddlewareManagerCommand cmd : sorted.keySet()) {
|
||||
String filename = getFilenameForCommand(cmd);
|
||||
List<String> ret = ExecutingCommand.runNative("/bin/bash", workDir + File.separator + filename);
|
||||
log.info("Run {} Command: {}", MiddlewareManagerCommand.COMMAND_DEPLOYMENT.getStringValue(), ret);
|
||||
log.info("Run {} Command: {}", MiddlewareManagerCommand.COMMAND_DEPLOYMENT.getEnumString(), ret);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,17 +255,37 @@ public class MiddlewareManagerServiceImpl implements MiddlewareManagerService {
|
|||
return new MulReturnType<>(ErrorCode.ERR_SYSTEMEXCEPTION, "");
|
||||
}
|
||||
|
||||
err = saveCommands(workDir, command);
|
||||
if (err.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = downloadAndValidateConfigFiles(workDir, configFiles);
|
||||
if (err.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
return err;
|
||||
}
|
||||
if (!commonConfigure.isAsyncDeployment()) {
|
||||
err = saveCommands(workDir, command);
|
||||
if (err.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
runCommand(workDir, command);
|
||||
err = downloadAndValidateConfigFiles(workDir, configFiles);
|
||||
if (err.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
return err;
|
||||
}
|
||||
|
||||
runCommand(workDir, command);
|
||||
} else {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
log.info("++++ Task {} Start Running...", data.getUid());
|
||||
MulReturnType<ErrorCode, String> error = saveCommands(workDir, command);
|
||||
if (error.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
log.error("---- Finish Task {} Because Of Save Command Error: {}", data.getUid(), error.getSecondParam());
|
||||
return;
|
||||
}
|
||||
|
||||
error = downloadAndValidateConfigFiles(workDir, configFiles);
|
||||
if (error.getFirstParam() != ErrorCode.ERR_OK) {
|
||||
log.error("---- Finish Task {} Because Of Download Config File Error: {}", data.getUid(), error.getSecondParam());
|
||||
return;
|
||||
}
|
||||
runCommand(workDir, command);
|
||||
log.info("---- Task {} Finished", data.getUid());
|
||||
});
|
||||
}
|
||||
|
||||
return new MulReturnType<>(ErrorCode.ERR_OK, data.getUid());
|
||||
}
|
||||
|
|
|
@ -28,6 +28,14 @@ spring.jackson.deserialization.fail-on-unknown-properties=false
|
|||
# Swagger-UI Custom Path
|
||||
springdoc.swagger-ui.path=/swagger-ui.html
|
||||
|
||||
# OSS Configuration
|
||||
#gzs.common.oss.enabled=true
|
||||
gzs.common.oss.config.default.accessKey=accessKey
|
||||
gzs.common.oss.config.default.secretKey=secretKey
|
||||
gzs.common.oss.config.default.endpoint=endpoint
|
||||
gzs.common.oss.config.default.accessUrl=accessUrl
|
||||
gzs.common.oss.config.default.bucketName=bucketName
|
||||
|
||||
# common :
|
||||
common.token-expired-of-seconds=600
|
||||
common.allow-passwd-retry-times=3
|
||||
|
@ -35,6 +43,7 @@ common.show-sql-command=false
|
|||
common.res-sampling-msencond=10000
|
||||
common.locale=zh_CN
|
||||
common.data-root-directory=/opt/middleware-agent/data
|
||||
common.async-deployment=true
|
||||
|
||||
# protocol:
|
||||
protocol.check-timestamp=true
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue