[ Server ] [ APP ] - accomplish rke and dashboard

This commit is contained in:
zeaslity
2023-11-20 17:35:08 +08:00
parent c47e6b5ed1
commit eb778bf60b
15 changed files with 277 additions and 83 deletions

View File

@@ -1,12 +1,21 @@
package io.wdd.func.auto.beans;
/**
* 参数固定顺序为 A1C2IP SUPREME N1C2IP A1C1IP A1C1JS M2D2IP KIMMY
*/
public enum AppFunctionEnum {
DEPLOY_RKE(
"DEPLOY_RKE",
"部署rke的组件准备环境"
),
DEPLOY_K8S_NAMESPACE(
"DEPLOY_K8S_NAMESPACE",
"部署k8s的业务应用的namespace, 参数A1C2IP, SUPREME"
),
DEPLOY_K8S_DASHBOARD(
"DEPLOY_K8S_DASHBOARD",
"部署kubernetes dashboard, 参数A1C2IP"
@@ -19,7 +28,7 @@ public enum AppFunctionEnum {
DEPLOY_NFS(
"DEPLOY_NFS",
"部署nfs+storage_class, 参数为N1C2IP"
"部署nfs+storage_class, 参数为A1C2IP, SUPREME, N1C2IP"
),
@@ -30,12 +39,12 @@ public enum AppFunctionEnum {
DEPLOY_K8S_PVC(
"DEPLOY_K8S_PVC",
"部署所需要的pvc后端存储参数 SUPREME"
"部署所需要的pvc后端存储参数 A1C2IP, SUPREME"
),
DEPLOY_K8S_MYSQL(
"DEPLOY_K8S_MYSQL",
"部署k8s mysql, 参数 SUPREME A1C2IP"
"部署k8s mysql, 参数 A1C2IP, SUPREME"
),
LOAD_MYSQL_INIT_SCRIPT(
@@ -45,17 +54,17 @@ public enum AppFunctionEnum {
DEPLOY_K8S_REDIS(
"DEPLOY_K8S_REDIS",
"部署k8s redis, 参数 SUPREME A1C2IP "
"部署k8s redis, 参数 A1C2IP, SUPREME "
),
DEPLOY_K8S_MIDDLEWARES(
"DEPLOY_K8S_MIDDLEWARES",
"部署k8s mongo nacos emqxs, 参数 SUPREME A1C2IP "
"部署k8s mongo nacos emqxs, 参数 A1C2IP, SUPREME "
),
INIT_MINIO(
"INIT_MINIO",
"初始化MINIO c参数SUPREME A1C2IP M2D2IP"
"初始化MINIO 参数 A1C2IP, SUPREME, M2D2IP"
),
DEPLOY_K8S_SRS(

View File

@@ -17,24 +17,23 @@ import java.util.List;
@ApiModel("项目实施阶段的上下文实体类")
public class ProjectDeployContext {
Long projectId;
ServerInfoPO masterNode;
List<ServerInfoPO> agentNodeList;
boolean masterBaseProcedureAccomplished;
boolean agentBaseProcedureAccomplished;
// harbor
public static final ArrayList<String> PROJECT_NEED_TO_BY_SYNCHRONIZED = new ArrayList<>(
List.of(
"rancher",
"cmii"
)
);
Long projectId;
ServerInfoPO masterNode;
List<ServerInfoPO> agentNodeList;
// base
boolean masterBaseProcedureAccomplished;
boolean agentBaseProcedureAccomplished;
boolean rancherHarborSynchronized;
boolean cmiiHarborSynchronized;
String currentSynchronizingProject;
// app
}

View File

@@ -0,0 +1,140 @@
package io.wdd.func.auto.service;
import io.wdd.func.auto.beans.AppFunctionEnum;
import io.wdd.func.auto.beans.ProjectDeployContext;
import io.wdd.server.beans.po.ProjectInfoPO;
import io.wdd.server.coreService.CoreProjectService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class AppFuncScheduler {
@Resource
FuncService funcService;
@Resource
CoreProjectService coreProjectService;
/**
* 参数固定顺序为 A1C2IP SUPREME N1C2IP A1C1IP A1C1JS M2D2IP KIMMY
*
* @param projectDeployContext
* @param projectInfoPO
* @return
*/
private static ArrayList<String> buildAppFuncArgs(ProjectDeployContext projectDeployContext, ProjectInfoPO projectInfoPO) {
ArrayList<String> appFuncArgs = new ArrayList<>();
appFuncArgs.add(projectDeployContext
.getMasterNode()
.getServerIpInV4());
appFuncArgs.add(projectInfoPO.getProjectNamespace());
appFuncArgs.add(projectDeployContext
.getMasterNode()
.getServerIpInV4());
appFuncArgs.add(projectDeployContext
.getMasterNode()
.getServerIpPbV4());
appFuncArgs.add(projectInfoPO.getProjectWebServicePort());
appFuncArgs.add("M2D2IP");
appFuncArgs.add(projectInfoPO.getProjectVersion());
return appFuncArgs;
}
public boolean runProcedure(ProjectDeployContext projectDeployContext) {
// before run
// check base requirement
beforeRunProcedure(projectDeployContext);
// during run
doRunProcedure(projectDeployContext);
// after run
afterRunProcedure(projectDeployContext);
return true;
}
private void afterRunProcedure(ProjectDeployContext projectDeployContext) {
// 检查是否安装完成, 对安装环境进行判定
log.debug("afterRunProcedure complete!");
}
private void doRunProcedure(ProjectDeployContext projectDeployContext) {
// 执行 基础功能施工的内容
String masterTopicName = projectDeployContext
.getMasterNode()
.getTopicName();
ProjectInfoPO projectInfoPO = coreProjectService.projectGetOne(projectDeployContext.getProjectId());
if (ObjectUtils.isEmpty(projectInfoPO)) {
log.error(
"project id of [{}] wrong ! cant find project !",
projectDeployContext.getProjectId()
);
}
ArrayList<String> appFuncArgs = buildAppFuncArgs(
projectDeployContext,
projectInfoPO
);
List<AppFunctionEnum> appFunctionEnumList = List.of(
AppFunctionEnum.DEPLOY_RKE,
AppFunctionEnum.DEPLOY_K8S_DASHBOARD
);
for (AppFunctionEnum appFunctionEnum : appFunctionEnumList) {
// rebuild
appFuncArgs.add(
0,
appFunctionEnum.getAppOpname()
);
boolean appFuncJudge = funcService.callAppFuncAndJudge(
masterTopicName,
appFunctionEnum,
appFuncArgs
);
if (!appFuncJudge) {
log.error(
"app func of {} execute error !",
appFunctionEnum.getAppOpname()
);
return;
}
}
}
private void beforeRunProcedure(ProjectDeployContext projectDeployContext) {
// 检查是否符合规定
// 检查每一个Agent是否能够连通,调用命令返回结果
// 打印施工信息
log.debug("beforeRunProcedure complete!");
}
}

View File

@@ -93,6 +93,7 @@ public class BaseFuncScheduler {
// BaseFunctionEnum.INSTALL_DEFAULT_SSH_KEY,
// BaseFunctionEnum.INSTALL_HARBOR,
// BaseFunctionEnum.INSTALL_ZSH
);

View File

@@ -1,6 +1,7 @@
package io.wdd.func.auto.service;
import io.wdd.func.auto.beans.AppFunctionEnum;
import io.wdd.func.auto.beans.BaseFunctionEnum;
import io.wdd.func.auto.beans.HarborFunctionEnum;
@@ -25,5 +26,7 @@ public interface FuncService {
*/
boolean callBaseFuncAndJudge(String agentTopicName, BaseFunctionEnum baseFunctionEnum, List<String> funcArgs, boolean durationTask);
boolean callAppFuncAndJudge(String agentTopicName, AppFunctionEnum appFunctionEnum, List<String> funcArgs);
boolean callHarborFuncAndJudge(String agentTopicName, HarborFunctionEnum harborFunctionEnum, ArrayList<String> funcArgs);
}

View File

@@ -1,5 +1,6 @@
package io.wdd.func.auto.service;
import io.wdd.func.auto.beans.AppFunctionEnum;
import io.wdd.func.auto.beans.BaseFunctionEnum;
import io.wdd.func.auto.beans.HarborFunctionEnum;
import io.wdd.rpc.execute.ExecutionMessageType;
@@ -68,6 +69,20 @@ public class FuncServiceImpl implements FuncService {
return JudgeSyncBaseCommandResult(syncResultLog);
}
@Override
public boolean callAppFuncAndJudge(String agentTopicName, AppFunctionEnum appFunctionEnum, List<String> funcArgs) {
List<String> syncResultLog = syncCallFunction(
agentTopicName,
ExecutionMessageType.APP,
funcArgs,
true
);
boolean appFuncResult = JudgeSyncBaseCommandResult(syncResultLog);
return appFuncResult;
}
@Override
public boolean callHarborFuncAndJudge(String agentTopicName, HarborFunctionEnum harborFunctionEnum, ArrayList<String> funcArgs) {

View File

@@ -1,12 +1,10 @@
package io.wdd.server.beans.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -16,11 +14,7 @@ import java.time.LocalDateTime;
*/
@TableName(value = "project_info")
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class ProjectInfoPO implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
@@ -39,10 +33,15 @@ public class ProjectInfoPO implements Serializable {
@TableField(value = "project_province")
private String projectProvince;
/**
*
* 部署的版本
*/
@TableField(value = "project_version")
private String projectVersion;
/**
* 部署的公网端口
*/
@TableField(value = "project_web_service_port")
private String projectWebServicePort;
/**
*
*/

View File

@@ -6,14 +6,12 @@ import io.wdd.server.beans.po.ServerInfoPO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
@ApiModel("Project-Server绑定关系实体类")
public class ProjectServerVO extends ProjectInfoPO {

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectInfoPO;
/**
* @author wdd
* @description 针对表【project_info】的数据库操作Mapper
* @createDate 2023-10-09 11:12:02
* @createDate 2023-11-20 16:47:25
* @Entity io.wdd.server.beans.po.ProjectInfoPO
*/
public interface ProjectInfoMapper extends BaseMapper<ProjectInfoPO> {

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectInfoPO;
/**
* @author wdd
* @description 针对表【project_info】的数据库操作Service
* @createDate 2023-10-09 11:12:02
* @createDate 2023-11-20 16:47:25
*/
public interface ProjectInfoService extends IService<ProjectInfoPO> {

View File

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
/**
* @author wdd
* @description 针对表【project_info】的数据库操作Service实现
* @createDate 2023-10-09 11:12:02
* @createDate 2023-11-20 16:47:25
*/
@Service
public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfoPO>

View File

@@ -9,6 +9,7 @@
<result property="projectName" column="project_name" jdbcType="VARCHAR"/>
<result property="projectProvince" column="project_province" jdbcType="VARCHAR"/>
<result property="projectVersion" column="project_version" jdbcType="VARCHAR"/>
<result property="projectWebServicePort" column="project_web_service_port" jdbcType="VARCHAR"/>
<result property="projectNamespace" column="project_namespace" jdbcType="VARCHAR"/>
<result property="deployNetEnv" column="deploy_net_env" jdbcType="TINYINT"/>
<result property="deployHardwareEnv" column="deploy_hardware_env" jdbcType="VARCHAR"/>
@@ -24,9 +25,9 @@
<sql id="Base_Column_List">
project_id
,project_name,project_province,
project_version,project_namespace,deploy_net_env,
deploy_hardware_env,create_time,update_time,
expired_time,trade_person_name,pre_sale_person_name,
is_offline_map,is_ai_deploy
project_version,project_web_service_port,project_namespace,
deploy_net_env,deploy_hardware_env,create_time,
update_time,expired_time,trade_person_name,
pre_sale_person_name,is_offline_map,is_ai_deploy
</sql>
</mapper>

View File

@@ -1,6 +1,7 @@
package io.wdd.server.func;
import io.wdd.func.auto.beans.ProjectDeployContext;
import io.wdd.func.auto.service.AppFuncScheduler;
import io.wdd.func.auto.service.BaseFuncScheduler;
import io.wdd.func.auto.service.HarborFuncScheduler;
import io.wdd.server.beans.po.ServerInfoPO;
@@ -20,6 +21,9 @@ public class TestBaseFuncScheduler {
@Resource
HarborFuncScheduler harborFuncScheduler;
@Resource
AppFuncScheduler appFuncScheduler;
@Resource
CoreServerService serverService;
@@ -51,7 +55,9 @@ public class TestBaseFuncScheduler {
// baseFuncScheduler.runProcedure(projectDeployContext);
harborFuncScheduler.runProcedure(projectDeployContext);
// harborFuncScheduler.runProcedure(projectDeployContext);
appFuncScheduler.runProcedure(projectDeployContext);
}
}