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();


Reply via email to