This is an automated email from the ASF dual-hosted git repository.
wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git
The following commit(s) were added to refs/heads/main by this push:
new ef86e0e BIGTOP-4256: Add APIs for Repository (#95)
ef86e0e is described below
commit ef86e0e3d4c6e98503f45fe64b31a3e5dea53fc5
Author: Zhiguo Wu <[email protected]>
AuthorDate: Sat Oct 26 10:29:21 2024 +0800
BIGTOP-4256: Add APIs for Repository (#95)
---
.../common/message/entity/pojo/RepoInfo.java | 12 +--
.../org/apache/bigtop/manager/dao/po/RepoPO.java | 21 ++--
.../manager/server/controller/RepoController.java | 58 +++++++++++
.../server/model/converter/RepoConverter.java | 19 ++--
.../bigtop/manager/server/model/dto/RepoDTO.java | 10 +-
.../bigtop/manager/server/model/req/RepoReq.java | 10 +-
.../bigtop/manager/server/model/vo/RepoVO.java | 10 +-
.../vo/RepoVO.java => service/RepoService.java} | 20 ++--
.../server/service/impl/ClusterServiceImpl.java | 5 +-
.../impl/RepoServiceImpl.java} | 40 ++++----
.../manager/server/stack/model/RepoModel.java | 53 ----------
.../manager/server/stack/model/StackModel.java | 7 --
.../src/main/resources/ddl/MySQL-DDL-CREATE.sql | 42 ++++----
.../main/resources/ddl/PostgreSQL-DDL-CREATE.sql | 38 +++----
.../server/controller/RepoControllerTest.java | 111 +++++++++++++++++++++
.../manager/server/service/ClusterServiceTest.java | 2 -
.../manager/server/service/RepoServiceTest.java | 92 +++++++++++++++++
.../manager/stack/core/param/BaseParams.java | 6 +-
.../manager/stack/core/spi/hook/InstallHook.java | 43 --------
.../stack/core/spi/script/AbstractScript.java | 21 ----
20 files changed, 364 insertions(+), 256 deletions(-)
diff --git
a/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/pojo/RepoInfo.java
b/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/pojo/RepoInfo.java
index 4eb4890..ba1294f 100644
---
a/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/pojo/RepoInfo.java
+++
b/bigtop-manager-common/src/main/java/org/apache/bigtop/manager/common/message/entity/pojo/RepoInfo.java
@@ -27,17 +27,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class RepoInfo {
- private String repoId;
+ private String name;
- private String repoName;
-
- private String repoType;
+ private String arch;
private String baseUrl;
- private String os;
-
- private String arch;
-
- private String mirrorList;
+ private Integer type;
}
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
index 53e513c..a4e0ec8 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/RepoPO.java
@@ -35,24 +35,15 @@ public class RepoPO extends BasePO implements Serializable {
@Column(name = "id")
private Long id;
- @Column(name = "base_url")
- private String baseUrl;
-
- @Column(name = "os")
- private String os;
+ @Column(name = "name")
+ private String name;
@Column(name = "arch")
private String arch;
- @Column(name = "repo_id")
- private String repoId;
-
- @Column(name = "repo_name")
- private String repoName;
-
- @Column(name = "repo_type")
- private String repoType;
+ @Column(name = "base_url")
+ private String baseUrl;
- @Column(name = "cluster_id", nullable = false)
- private Long clusterId;
+ @Column(name = "type")
+ private Integer type;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/RepoController.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/RepoController.java
new file mode 100644
index 0000000..cc2f29c
--- /dev/null
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/RepoController.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.server.controller;
+
+import org.apache.bigtop.manager.server.model.converter.RepoConverter;
+import org.apache.bigtop.manager.server.model.req.RepoReq;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
+import org.apache.bigtop.manager.server.service.RepoService;
+import org.apache.bigtop.manager.server.utils.ResponseEntity;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+@Tag(name = "Repo Controller")
+@RestController
+@RequestMapping("/repos")
+public class RepoController {
+
+ @Resource
+ private RepoService repoService;
+
+ @Operation(summary = "list", description = "List repos")
+ @GetMapping
+ public ResponseEntity<List<RepoVO>> list() {
+ return ResponseEntity.success(repoService.list());
+ }
+
+ @Operation(summary = "update", description = "Update repos")
+ @PutMapping
+ public ResponseEntity<List<RepoVO>> update(@RequestBody List<RepoReq>
repoReqList) {
+ return
ResponseEntity.success(repoService.update(RepoConverter.INSTANCE.fromReq2DTO(repoReqList)));
+ }
+}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
index 84599d0..cf4d08f 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
@@ -19,14 +19,13 @@
package org.apache.bigtop.manager.server.model.converter;
import org.apache.bigtop.manager.common.message.entity.pojo.RepoInfo;
-import org.apache.bigtop.manager.dao.po.ClusterPO;
import org.apache.bigtop.manager.dao.po.RepoPO;
import org.apache.bigtop.manager.server.config.MapStructSharedConfig;
import org.apache.bigtop.manager.server.model.dto.RepoDTO;
+import org.apache.bigtop.manager.server.model.req.RepoReq;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
-import org.mapstruct.Context;
import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.List;
@@ -36,11 +35,17 @@ public interface RepoConverter {
RepoConverter INSTANCE = Mappers.getMapper(RepoConverter.class);
- @Mapping(target = "clusterId", expression = "java(clusterPO.getId())")
- RepoPO fromDTO2PO(RepoDTO repoDTO, @Context ClusterPO clusterPO);
+ RepoDTO fromReq2DTO(RepoReq repoReq);
- @Mapping(target = "clusterId", expression = "java(clusterPO.getId())")
- List<RepoPO> fromDTO2PO(List<RepoDTO> repoDTOList, @Context ClusterPO
clusterPO);
+ List<RepoDTO> fromReq2DTO(List<RepoReq> repoReqList);
+
+ RepoPO fromDTO2PO(RepoDTO repoDTO);
+
+ List<RepoPO> fromDTO2PO(List<RepoDTO> repoDTOList);
+
+ RepoVO fromPO2VO(RepoPO repoPO);
+
+ List<RepoVO> fromPO2VO(List<RepoPO> repoPOList);
RepoInfo fromPO2Message(RepoPO repoPO);
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/RepoDTO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/RepoDTO.java
index 6683956..adc9ca2 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/RepoDTO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/RepoDTO.java
@@ -27,15 +27,13 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class RepoDTO {
- private String repoId;
+ private Integer id;
- private String repoName;
+ private String name;
- private String repoType;
+ private String arch;
private String baseUrl;
- private String os;
-
- private String arch;
+ private Integer type;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/RepoReq.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/RepoReq.java
index 324dc97..796e875 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/RepoReq.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/RepoReq.java
@@ -27,15 +27,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
public class RepoReq {
- private String repoId;
-
- private String repoName;
-
- private String repoType;
+ private Integer id;
private String baseUrl;
-
- private String os;
-
- private String arch;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
index 5968ea0..6c3143b 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
@@ -23,15 +23,11 @@ import lombok.Data;
@Data
public class RepoVO {
- private String repoId;
+ private Integer id;
- private String repoName;
+ private String name;
- private String repoType;
+ private String arch;
private String baseUrl;
-
- private String os;
-
- private String arch;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/RepoService.java
similarity index 73%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/RepoService.java
index 5968ea0..5a0cdd9 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/RepoVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/RepoService.java
@@ -16,22 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.server.model.vo;
+package org.apache.bigtop.manager.server.service;
-import lombok.Data;
+import org.apache.bigtop.manager.server.model.dto.RepoDTO;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
-@Data
-public class RepoVO {
+import java.util.List;
- private String repoId;
+public interface RepoService {
- private String repoName;
+ List<RepoVO> list();
- private String repoType;
-
- private String baseUrl;
-
- private String os;
-
- private String arch;
+ List<RepoVO> update(List<RepoDTO> repoDTOList);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
index d412236..3bc0403 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ClusterServiceImpl.java
@@ -95,13 +95,12 @@ public class ClusterServiceImpl implements ClusterService {
hostService.batchSave(clusterPO.getId(), clusterDTO.getHostnames());
// Save repo
- List<RepoPO> repoPOList =
RepoConverter.INSTANCE.fromDTO2PO(clusterDTO.getRepoInfoList(), clusterPO);
+ List<RepoPO> repoPOList =
RepoConverter.INSTANCE.fromDTO2PO(clusterDTO.getRepoInfoList());
List<RepoPO> oldrepoPOList =
repoDao.findAllByClusterId(clusterPO.getId());
for (RepoPO repoPO : repoPOList) {
for (RepoPO oldRepoPO : oldrepoPOList) {
- if (oldRepoPO.getArch().equals(repoPO.getArch())
- && oldRepoPO.getOs().equals(repoPO.getOs())) {
+ if (oldRepoPO.getArch().equals(repoPO.getArch())) {
repoPO.setId(oldRepoPO.getId());
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/RepoServiceImpl.java
similarity index 50%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/RepoServiceImpl.java
index 84599d0..93a8a62 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/RepoConverter.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/RepoServiceImpl.java
@@ -16,33 +16,35 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.server.model.converter;
+package org.apache.bigtop.manager.server.service.impl;
-import org.apache.bigtop.manager.common.message.entity.pojo.RepoInfo;
-import org.apache.bigtop.manager.dao.po.ClusterPO;
import org.apache.bigtop.manager.dao.po.RepoPO;
-import org.apache.bigtop.manager.server.config.MapStructSharedConfig;
+import org.apache.bigtop.manager.dao.repository.RepoDao;
+import org.apache.bigtop.manager.server.model.converter.RepoConverter;
import org.apache.bigtop.manager.server.model.dto.RepoDTO;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
+import org.apache.bigtop.manager.server.service.RepoService;
-import org.mapstruct.Context;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import org.mapstruct.factory.Mappers;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
import java.util.List;
-@Mapper(config = MapStructSharedConfig.class)
-public interface RepoConverter {
+@Service
+public class RepoServiceImpl implements RepoService {
- RepoConverter INSTANCE = Mappers.getMapper(RepoConverter.class);
+ @Resource
+ private RepoDao repoDao;
- @Mapping(target = "clusterId", expression = "java(clusterPO.getId())")
- RepoPO fromDTO2PO(RepoDTO repoDTO, @Context ClusterPO clusterPO);
+ @Override
+ public List<RepoVO> list() {
+ return RepoConverter.INSTANCE.fromPO2VO(repoDao.findAll());
+ }
- @Mapping(target = "clusterId", expression = "java(clusterPO.getId())")
- List<RepoPO> fromDTO2PO(List<RepoDTO> repoDTOList, @Context ClusterPO
clusterPO);
-
- RepoInfo fromPO2Message(RepoPO repoPO);
-
- List<RepoInfo> fromDTO2Message(List<RepoDTO> repoDTOs);
+ @Override
+ public List<RepoVO> update(List<RepoDTO> repoDTOList) {
+ List<RepoPO> repoPOList =
RepoConverter.INSTANCE.fromDTO2PO(repoDTOList);
+ repoDao.partialUpdateByIds(repoPOList);
+ return list();
+ }
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/RepoModel.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/RepoModel.java
deleted file mode 100644
index d759e4d..0000000
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/RepoModel.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.bigtop.manager.server.stack.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import jakarta.xml.bind.annotation.XmlAccessType;
-import jakarta.xml.bind.annotation.XmlAccessorType;
-import jakarta.xml.bind.annotation.XmlElement;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@XmlAccessorType(XmlAccessType.FIELD)
-public class RepoModel {
-
- @XmlElement(name = "repo-id")
- private String repoId;
-
- @XmlElement(name = "repo-name")
- private String repoName;
-
- /**
- * Type of repositories, values can be 'binary', 'tarball'.
- */
- @XmlElement(name = "repo-type")
- private String repoType;
-
- @XmlElement(name = "base-url")
- private String baseUrl;
-
- private String os;
-
- private String arch;
-}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/StackModel.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/StackModel.java
index a896586..776b9ea 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/StackModel.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/stack/model/StackModel.java
@@ -23,9 +23,6 @@ import lombok.Data;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
-import jakarta.xml.bind.annotation.XmlElementWrapper;
-import jakarta.xml.bind.annotation.XmlElements;
-import java.util.List;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@@ -51,8 +48,4 @@ public class StackModel {
@XmlElement(name = "repo-template")
private String repoTemplate;
-
- @XmlElementWrapper(name = "repos")
- @XmlElements(@XmlElement(name = "repo"))
- private List<RepoModel> repos;
}
diff --git a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
index aee5d2a..7405576 100644
--- a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
@@ -60,8 +60,8 @@ CREATE TABLE `user`
`password` VARCHAR(32) DEFAULT NULL,
`nickname` VARCHAR(32) DEFAULT NULL,
`status` BIT(1) DEFAULT 1 COMMENT '0-Disable, 1-Enable',
- `create_time` DATETIME DEFAULT NULL,
- `update_time` DATETIME DEFAULT NULL,
+ `create_time` DATETIME DEFAULT NULL DEFAULT CURRENT_TIMESTAMP,
+ `update_time` DATETIME DEFAULT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`create_by` BIGINT,
`update_by` BIGINT,
PRIMARY KEY (`id`),
@@ -152,8 +152,8 @@ CREATE TABLE `host`
`desc` VARCHAR(255) DEFAULT NULL,
`status` INTEGER DEFAULT NULL COMMENT '1-healthy,
2-unhealthy, 3-unknown',
`err_info` VARCHAR(255) DEFAULT NULL,
- `create_time` DATETIME DEFAULT NULL,
- `update_time` DATETIME DEFAULT NULL,
+ `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`create_by` BIGINT,
`update_by` BIGINT,
PRIMARY KEY (`id`),
@@ -164,20 +164,15 @@ CREATE TABLE `host`
CREATE TABLE `repo`
(
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
- `cluster_id` BIGINT(20) UNSIGNED NOT NULL,
- `os` VARCHAR(32) DEFAULT NULL,
+ `name` VARCHAR(32) DEFAULT NULL,
`arch` VARCHAR(32) DEFAULT NULL,
`base_url` VARCHAR(64) DEFAULT NULL,
- `repo_id` VARCHAR(32) DEFAULT NULL,
- `repo_name` VARCHAR(64) DEFAULT NULL,
- `repo_type` VARCHAR(64) DEFAULT NULL,
- `create_time` DATETIME DEFAULT NULL,
- `update_time` DATETIME DEFAULT NULL,
+ `type` INT DEFAULT NULL COMMENT '1-services, 2-tools',
+ `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
+ `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`create_by` BIGINT,
`update_by` BIGINT,
- PRIMARY KEY (`id`),
- KEY `idx_cluster_id` (`cluster_id`),
- UNIQUE KEY `uk_repo_id` (`repo_id`, `os`, `arch`, `cluster_id`)
+ PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `stack`
@@ -384,12 +379,19 @@ CREATE TABLE `llm_chat_message`
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Adding default admin user
-INSERT INTO bigtop_manager.user (id, create_time, update_time, nickname,
password, status, username)
-VALUES (1, now(), now(), 'Administrator', '21232f297a57a5a743894a0e4a801fc3',
true, 'admin');
+INSERT INTO user (username, password, nickname, status)
+VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', true);
+
+INSERT INTO repo (name, arch, base_url, type)
+VALUES
+('Service tarballs', 'x86_64', 'http://your-repo/', 1),
+('Service tarballs', 'aarch64', 'http://your-repo/', 1),
+('BM tools', 'x86_64', 'http://your-repo/', 2),
+('BM tools', 'aarch64', 'http://your-repo/', 2);
-- Adding default llm platform
-INSERT INTO bigtop_manager.llm_platform (id, credential, name, support_models)
+INSERT INTO llm_platform (credential, name, support_models)
VALUES
-(1, '{"apiKey": "API Key"}', 'OpenAI',
'gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
-(2, '{"apiKey": "API Key"}', 'DashScope',
'qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
-(3, '{"apiKey": "API Key", "secretKey": "Secret Key"}',
'QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
+('{"apiKey": "API Key"}', 'OpenAI',
'gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
+('{"apiKey": "API Key"}', 'DashScope',
'qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
+('{"apiKey": "API Key", "secretKey": "Secret Key"}',
'QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
diff --git
a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
index 4ed54fd..acc63f3 100644
--- a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
@@ -41,8 +41,8 @@ CREATE TABLE "user"
password VARCHAR(32) DEFAULT NULL,
nickname VARCHAR(32) DEFAULT NULL,
status BOOLEAN DEFAULT TRUE,
- create_time TIMESTAMP(0) DEFAULT NULL,
- update_time TIMESTAMP(0) DEFAULT NULL,
+ create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
+ update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
create_by BIGINT,
update_by BIGINT,
PRIMARY KEY (id),
@@ -148,8 +148,8 @@ CREATE TABLE host
"desc" VARCHAR(255) DEFAULT NULL,
status INT DEFAULT NULL,
err_info VARCHAR(255) DEFAULT NULL,
- create_time TIMESTAMP(0) DEFAULT NULL,
- update_time TIMESTAMP(0) DEFAULT NULL,
+ create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
+ update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
create_by BIGINT,
update_by BIGINT,
PRIMARY KEY (id),
@@ -165,23 +165,18 @@ CREATE INDEX idx_host_cluster_id ON host (cluster_id);
CREATE TABLE repo
(
id BIGINT CHECK (id > 0) NOT NULL GENERATED ALWAYS AS
IDENTITY,
- cluster_id BIGINT CHECK (cluster_id > 0) NOT NULL,
- os VARCHAR(32) DEFAULT NULL,
+ name VARCHAR(32) DEFAULT NULL,
arch VARCHAR(32) DEFAULT NULL,
base_url VARCHAR(64) DEFAULT NULL,
- repo_id VARCHAR(32) DEFAULT NULL,
- repo_name VARCHAR(64) DEFAULT NULL,
- repo_type VARCHAR(64) DEFAULT NULL,
- create_time TIMESTAMP(0) DEFAULT NULL,
- update_time TIMESTAMP(0) DEFAULT NULL,
+ type INTEGER DEFAULT NULL,
+ create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
+ update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
create_by BIGINT,
update_by BIGINT,
- PRIMARY KEY (id),
- CONSTRAINT uk_repo_id UNIQUE (repo_id, os, arch, cluster_id)
+ PRIMARY KEY (id)
);
-DROP INDEX IF EXISTS idx_cluster_id;
-CREATE INDEX idx_cluster_id ON repo (cluster_id);
+COMMENT ON COLUMN repo.type IS '1-services, 2-tools';
CREATE TABLE stack
(
@@ -397,10 +392,17 @@ CREATE TABLE llm_chat_message
CREATE INDEX idx_thread_id ON llm_chat_message (thread_id);
CREATE INDEX idx_message_user_id ON llm_chat_message (user_id);
-INSERT INTO "user" (create_time, update_time, nickname, password, status,
username)
-VALUES (now(), now(), 'Administrator', '21232f297a57a5a743894a0e4a801fc3',
true, 'admin');
+INSERT INTO "user" (username, password, nickname, status)
+VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', true);
+
+INSERT INTO repo (name, arch, base_url, type)
+VALUES
+('Service tarballs', 'x86_64', 'http://your-repo/', 1),
+('Service tarballs', 'aarch64', 'http://your-repo/', 1),
+('BM tools', 'x86_64', 'http://your-repo/', 2),
+('BM tools', 'aarch64', 'http://your-repo/', 2);
-INSERT INTO llm_platform (credential, NAME, support_models)
+INSERT INTO llm_platform (credential, name, support_models)
VALUES
('{"apiKey": "API
Key"}','OpenAI','gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
('{"apiKey": "API
Key"}','DashScope','qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
diff --git
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/RepoControllerTest.java
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/RepoControllerTest.java
new file mode 100644
index 0000000..0d20812
--- /dev/null
+++
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/RepoControllerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.server.controller;
+
+import org.apache.bigtop.manager.server.model.req.RepoReq;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
+import org.apache.bigtop.manager.server.service.RepoService;
+import org.apache.bigtop.manager.server.utils.MessageSourceUtils;
+import org.apache.bigtop.manager.server.utils.ResponseEntity;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+public class RepoControllerTest {
+
+ @Mock
+ private RepoService repoService;
+
+ @InjectMocks
+ private RepoController repoController;
+
+ private MockedStatic<MessageSourceUtils> mockedMessageSourceUtils;
+
+ @BeforeEach
+ void setUp() {
+ mockedMessageSourceUtils =
Mockito.mockStatic(MessageSourceUtils.class);
+ when(MessageSourceUtils.getMessage(any())).thenReturn("Mocked
message");
+ }
+
+ @AfterEach
+ void tearDown() {
+ mockedMessageSourceUtils.close();
+ }
+
+ @Test
+ void listRepos() {
+ List<RepoVO> repos = new ArrayList<>();
+ when(repoService.list()).thenReturn(repos);
+
+ ResponseEntity<List<RepoVO>> response = repoController.list();
+
+ assertTrue(response.isSuccess());
+ assertEquals(repos, response.getData());
+ }
+
+ @Test
+ void updateRepos() {
+ List<RepoReq> repoReqList = new ArrayList<>();
+ List<RepoVO> updatedRepos = new ArrayList<>();
+ when(repoService.update(any())).thenReturn(updatedRepos);
+
+ ResponseEntity<List<RepoVO>> response =
repoController.update(repoReqList);
+
+ assertTrue(response.isSuccess());
+ assertEquals(updatedRepos, response.getData());
+ }
+
+ @Test
+ void listRepos_notNull() {
+ when(repoService.list()).thenReturn(new ArrayList<>());
+
+ ResponseEntity<List<RepoVO>> response = repoController.list();
+
+ assertNotNull(response.getData());
+ }
+
+ @Test
+ void updateRepos_emptyRequest() {
+ List<RepoReq> repoReqList = new ArrayList<>();
+ List<RepoVO> updatedRepos = new ArrayList<>();
+ when(repoService.update(any())).thenReturn(updatedRepos);
+
+ ResponseEntity<List<RepoVO>> response =
repoController.update(repoReqList);
+
+ assertTrue(response.isSuccess());
+ assertEquals(updatedRepos, response.getData());
+ }
+}
diff --git
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/ClusterServiceTest.java
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/ClusterServiceTest.java
index 2037a25..42535ed 100644
---
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/ClusterServiceTest.java
+++
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/ClusterServiceTest.java
@@ -92,7 +92,6 @@ public class ClusterServiceTest {
clusterDTO.setStackVersion("1.0.0");
RepoDTO repoDTO = new RepoDTO();
repoDTO.setArch("x86_64");
- repoDTO.setOs("test");
clusterDTO.setRepoInfoList(List.of(repoDTO));
StackDTO stackDTO = new StackDTO();
stackDTO.setStackName("TestStack");
@@ -124,7 +123,6 @@ public class ClusterServiceTest {
when(hostService.batchSave(any(), any())).thenReturn(null);
RepoPO repoPO = new RepoPO();
repoPO.setArch("x86_64");
- repoPO.setOs("test");
when(repoDao.findAllByClusterId(any())).thenReturn(List.of(repoPO));
try (MockedStatic<StackUtils> mockedStackUtils =
mockStatic(StackUtils.class, CALLS_REAL_METHODS)) {
mockedStackUtils.when(StackUtils::getStackKeyMap).thenReturn(mockStackKeyMap);
diff --git
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/RepoServiceTest.java
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/RepoServiceTest.java
new file mode 100644
index 0000000..918c920
--- /dev/null
+++
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/service/RepoServiceTest.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.bigtop.manager.server.service;
+
+import org.apache.bigtop.manager.dao.po.RepoPO;
+import org.apache.bigtop.manager.dao.repository.RepoDao;
+import org.apache.bigtop.manager.server.model.converter.RepoConverter;
+import org.apache.bigtop.manager.server.model.dto.RepoDTO;
+import org.apache.bigtop.manager.server.model.vo.RepoVO;
+import org.apache.bigtop.manager.server.service.impl.RepoServiceImpl;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+public class RepoServiceTest {
+
+ @Mock
+ private RepoDao repoDao;
+
+ @Mock
+ private RepoConverter repoConverter;
+
+ @InjectMocks
+ private RepoServiceImpl repoServiceImpl;
+
+ @Test
+ void listRepos_returnsRepoVOList() {
+ List<RepoPO> repoPOList = new ArrayList<>();
+ List<RepoVO> repoVOList = new ArrayList<>();
+ when(repoDao.findAll()).thenReturn(repoPOList);
+
+ List<RepoVO> result = repoServiceImpl.list();
+
+ assertEquals(repoVOList, result);
+ }
+
+ @Test
+ void updateRepos_returnsUpdatedRepoVOList() {
+ List<RepoDTO> repoDTOList = new ArrayList<>();
+ List<RepoVO> repoVOList = new ArrayList<>();
+
+ List<RepoVO> result = repoServiceImpl.update(repoDTOList);
+
+ assertEquals(repoVOList, result);
+ }
+
+ @Test
+ void listRepos_notNull() {
+ when(repoDao.findAll()).thenReturn(new ArrayList<>());
+
+ List<RepoVO> result = repoServiceImpl.list();
+
+ assertNotNull(result);
+ }
+
+ @Test
+ void updateRepos_emptyRequest() {
+ List<RepoDTO> repoDTOList = new ArrayList<>();
+ List<RepoVO> repoVOList = new ArrayList<>();
+
+ List<RepoVO> result = repoServiceImpl.update(repoDTOList);
+
+ assertEquals(repoVOList, result);
+ }
+}
diff --git
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/param/BaseParams.java
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/param/BaseParams.java
index 4a4111b..d5df7a4 100644
---
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/param/BaseParams.java
+++
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/param/BaseParams.java
@@ -103,8 +103,7 @@ public abstract class BaseParams implements Params {
@Override
public RepoInfo repo() {
return LocalSettings.repos().stream()
- .filter(r -> OSDetection.getOS().equals(r.getOs())
- && OSDetection.getArch().equals(r.getArch()))
+ .filter(r -> OSDetection.getArch().equals(r.getArch()))
.findFirst()
.orElseThrow(() -> new StackException(
"Cannot find repo for os: [{}] and arch: [{}]",
OSDetection.getOS(), OSDetection.getArch()));
@@ -115,8 +114,7 @@ public abstract class BaseParams implements Params {
RepoInfo repo = this.repo();
List<PackageInfo> packageInfoList = new ArrayList<>();
for (PackageSpecificInfo packageSpecificInfo :
this.commandPayload.getPackageSpecifics()) {
- if (!packageSpecificInfo.getOs().contains(repo.getOs())
- ||
!packageSpecificInfo.getArch().contains(repo.getArch())) {
+ if (packageSpecificInfo.getArch().contains(repo.getArch())) {
continue;
}
diff --git
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/hook/InstallHook.java
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/hook/InstallHook.java
index 1015a10..2ef0c28 100644
---
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/hook/InstallHook.java
+++
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/hook/InstallHook.java
@@ -18,22 +18,12 @@
*/
package org.apache.bigtop.manager.stack.core.spi.hook;
-import org.apache.bigtop.manager.common.message.entity.pojo.RepoInfo;
-import org.apache.bigtop.manager.common.utils.os.OSDetection;
import org.apache.bigtop.manager.stack.core.param.Params;
-import org.apache.bigtop.manager.stack.core.utils.LocalSettings;
-import org.apache.bigtop.manager.stack.core.utils.PackageUtils;
import org.apache.bigtop.manager.stack.core.utils.linux.LinuxAccountUtils;
-import org.apache.bigtop.manager.stack.core.utils.template.BaseTemplate;
-
-import org.springframework.util.CollectionUtils;
import com.google.auto.service.AutoService;
import lombok.extern.slf4j.Slf4j;
-import java.io.File;
-import java.util.List;
-
/**
* obtain agent execute command
*/
@@ -46,10 +36,6 @@ public class InstallHook extends AbstractHook {
@Override
public void doBefore(Params params) {
addUserAndGroup(params);
-
- writeRepo(params);
-
- installPackages(params);
}
@Override
@@ -71,33 +57,4 @@ public class InstallHook extends AbstractHook {
LinuxAccountUtils.userAdd(user, group);
}
}
-
- private void writeRepo(Params params) {
- RepoInfo repo = LocalSettings.repos().stream()
- .filter(r -> OSDetection.getOS().equals(r.getOs())
- && OSDetection.getArch().equals(r.getArch())
- && !r.getRepoType().equals("tarball"))
- .findFirst()
- .orElse(null);
-
- if (repo != null) {
- String filename = "/etc/yum.repos.d/" +
repo.getRepoId().replace(".", "_") + ".repo";
- if (!new File(filename).exists()) {
- log.info("Writing repo file: [{}]", filename);
- String repoTemplate =
LocalSettings.cluster().getRepoTemplate();
- BaseTemplate.writeCustomTemplate(filename, repo, repoTemplate);
- }
- }
- }
-
- private void installPackages(Params params) {
- List<String> installedPackages = PackageUtils.listInstalledPackages();
- List<String> needInstallPackages = LocalSettings.packages().stream()
- .filter(pkg -> !installedPackages.contains(pkg))
- .toList();
-
- if (!CollectionUtils.isEmpty(needInstallPackages)) {
- PackageUtils.install(needInstallPackages);
- }
- }
}
diff --git
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/script/AbstractScript.java
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/script/AbstractScript.java
index 3342a3b..94733d4 100644
---
a/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/script/AbstractScript.java
+++
b/bigtop-manager-stack/bigtop-manager-stack-core/src/main/java/org/apache/bigtop/manager/stack/core/spi/script/AbstractScript.java
@@ -22,7 +22,6 @@ import
org.apache.bigtop.manager.common.message.entity.pojo.PackageInfo;
import org.apache.bigtop.manager.common.message.entity.pojo.RepoInfo;
import org.apache.bigtop.manager.common.shell.ShellResult;
import org.apache.bigtop.manager.stack.core.param.Params;
-import org.apache.bigtop.manager.stack.core.utils.PackageUtils;
import org.apache.bigtop.manager.stack.core.utils.TarballUtils;
import org.apache.commons.lang3.StringUtils;
@@ -35,9 +34,6 @@ import java.util.Properties;
@Slf4j
public abstract class AbstractScript implements Script {
- public static final String REPO_TYPE_BINARY = "binary";
- public static final String REPO_TYPE_TARBALL = "tarball";
-
public static final String PROPERTY_KEY_SKIP_LEVELS = "skipLevels";
@Override
@@ -46,23 +42,6 @@ public abstract class AbstractScript implements Script {
}
public ShellResult install(Params params, Properties properties) {
- if (params.repo().getRepoType().equals(REPO_TYPE_BINARY)) {
- return installBinary(params);
- } else if (params.repo().getRepoType().equals(REPO_TYPE_TARBALL)) {
- return installTarball(params, properties);
- } else {
- log.error("Unsupported repo type: {}",
params.repo().getRepoType());
- return ShellResult.fail();
- }
- }
-
- private ShellResult installBinary(Params params) {
- List<PackageInfo> packages = params.packages();
- List<String> packageNames =
packages.stream().map(PackageInfo::getName).toList();
- return PackageUtils.install(packageNames);
- }
-
- private ShellResult installTarball(Params params, Properties properties) {
RepoInfo repo = params.repo();
List<PackageInfo> packages = params.packages();
String stackHome = params.stackHome();