This is an automated email from the ASF dual-hosted git repository.

mikexue pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/eventmesh-dashboard.git


The following commit(s) were added to refs/heads/main by this push:
     new 70e1b41  Merge eventmesh-dashboard for packaging and publishing
70e1b41 is described below

commit 70e1b411123078591873800883315794a9a9c02b
Author: githublaohu <[email protected]>
AuthorDate: Thu Dec 18 10:32:27 2025 +0800

    Merge eventmesh-dashboard for packaging and publishing
    
    * fix(*): 1. 合并代码, 2. 处理格式问题
    
    * fix(*):1. 提升插件版本 2. 添加协议头
    
    * fix(console):1. 设计 report 模块 2. 开 es,open模块,3. 开发 report 基本标准 4. 开发 
iotdb模块
    
    * fix(*):1. 保存更新,因为 rocketmq-exporter 官方文档 与 rocketmq-exporter 
源码文档不一致,需要安装源码文档定义数据对象
    
    * fix(console): 1. 完成 db cluster 关系 2. 两个数据 mock 模型
    
    * fix(*):1. 完成 sync 模块集成测试 2. 重构 metadata 关系
    
    * fix(*):1. check style
    
    * fix(*) 1. 没有解决 地址 与 端口问题 2. 没有解决 自动化部署地址问题
    
    * fix(*): 1. 解决冲突
    
    * fix(*):1. 解决冲突
    
    * fix(*):1. 解决样式问题
    
    * 1. 创建 dist 模块,发布问题,2. 完成地址服务 3. config问题还在解决 4. runtime唯一config在解决 5. 
runtime 单独部署行为重新设计
    
    * fix(*)1: 解决冲突
    
    * fix(:):1. 解决冲突
    
    ---------
    
    Co-authored-by: jie <[email protected]>
    Co-authored-by: [email protected] <[email protected]>
---
 README.zh-CN.md                                    |   2 +-
 eventmesh-dashboard-common/pom.xml                 |   1 -
 .../common/enums/ClusterSyncMetadataEnum.java      |   2 +-
 .../dashboard/common/enums/ClusterType.java        | 180 +++++++++++++++----
 .../dashboard/common/enums/DeployStatusType.java   |   6 +
 .../dashboard/common/util/ClasspathScanner.java    |   2 +-
 .../common/utils/ClusterTypeRelationship.java      |   1 +
 eventmesh-dashboard-console/pom.xml                |  24 +--
 .../controller/agent/AgentActionController.java    | 150 +++++++++++-----
 .../controller/agent/AgentCheckRuntimeVO.java      |   4 +
 .../controller/deploy/ClusterCycleController.java  |   2 +-
 .../controller/deploy/CreateCycleService.java      |   5 +-
 .../create/CreateClusterByDeployScriptHandler.java |  16 +-
 .../console/domain/ClusterAndRuntimeDomain.java    |   8 +
 .../domain/Impl/ClusterAndRuntimeDomainImpl.java   | 200 +++++++++++++++++----
 .../console/entity/function/ConfigEntity.java      |   1 +
 .../function/ConfigTemplateEntity.java}            |  26 +--
 .../console/mapper/cluster/ClusterMapper.java      |   4 +-
 .../mapper/cluster/ClusterRelationshipMapper.java  |  18 +-
 .../console/mapper/cluster/RuntimeMapper.java      |   6 +
 .../console/mapper/function/ConfigMapper.java      |   4 +-
 .../mapper/function/ConfigTemplateMapper.java      |  47 +++++
 .../ClusterAndRuntimeDomainQO.java                 |  28 +--
 .../ClusterAndRuntimeOfRelationshipDO.java         |  17 ++
 .../QueryTreeByChildClusterIdDO.java               |  28 ++-
 .../DO/service/function/config/CopyConfigDO.java   |  17 +-
 ...ryRelationClusterByClusterIdListAndTypeQO.java} |  13 +-
 .../model/QO/function/config/CopyConfigQO.java     |  17 +-
 .../create/CreateClusterByDeployScriptDO.java      |   3 +
 .../cluster/ClusterRelationshipService.java        |   2 +
 .../console/service/cluster/ClusterService.java    |   4 +-
 .../impl/ClusterRelationshipServiceImpl.java       |   5 +
 .../service/cluster/impl/ClusterServiceImpl.java   |   4 +-
 .../service/deploy/impl/PortServiceImpl.java       |  12 +-
 .../console/service/function/ConfigService.java    |   7 +-
 .../service/function/ConfigTemplateService.java}   |  20 ++-
 .../service/function/Impl/ConfigServiceImpl.java   |  12 +-
 .../function/Impl/ConfigTemplateServiceImpl.java   |  47 +++++
 .../console/spring/support/FunctionManage.java     |   6 +
 .../support/address/AbstractAddressService.java    |  58 ++++++
 .../support/address/AddressManage.java}            |  42 ++---
 .../spring/support/address/AddressService.java     |  36 ++--
 .../spring/support/address/AddressServiceIPDO.java |  41 ++---
 .../support/address/AddressServiceResult.java      |  32 ++--
 .../address/RocketMQBrokerAddressService.java      |  88 +++++++++
 .../agent/AgentActionControllerUtils.java          |  43 +++++
 .../src/main/resources/eventmesh-dashboard.sql     |   2 +-
 .../apache/eventmesh/dashboard/console/Test1.java  |  11 +-
 .../domain/ClusterAndRuntimeDomainImplTest.java    |  18 ++
 eventmesh-dashboard-core/pom.xml                   |   5 +-
 .../core/function/multinetwork/ClusterPort.java    |  23 ++-
 .../core/function/multinetwork/PortMetadata.java   |   5 +
 eventmesh-dashboard-dist/README.md                 |   0
 eventmesh-dashboard-dist/ReleaseKnowStreaming.xml  | 103 +++++++++++
 .../docker}/Dockerfile                             |   0
 eventmesh-dashboard-dist/pom.xml                   |  67 +++++++
 eventmesh-dashboard-observe/pom.xml                |   1 -
 eventmesh-dashboard-service/pom.xml                |   3 +-
 pom.xml                                            |   3 +-
 59 files changed, 1206 insertions(+), 326 deletions(-)

diff --git a/README.zh-CN.md b/README.zh-CN.md
index ea1ae6f..bc96479 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -66,7 +66,7 @@ crontab -e
 
 ```
 cd eventmesh-dashboard
-./mvnw clean package
+./mvnw -Prelease-package -Dmaven.test.skip=true clean install -U
 ```
 
 > TODO download mysql-connector-j manually
diff --git a/eventmesh-dashboard-common/pom.xml 
b/eventmesh-dashboard-common/pom.xml
index 0057871..074849a 100644
--- a/eventmesh-dashboard-common/pom.xml
+++ b/eventmesh-dashboard-common/pom.xml
@@ -26,7 +26,6 @@
         <version>0.0.1-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.eventmesh.dashboard.common</groupId>
     <artifactId>eventmesh-dashboard-common</artifactId>
 
     <properties>
diff --git 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterSyncMetadataEnum.java
 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterSyncMetadataEnum.java
index dac75f9..6d71aad 100644
--- 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterSyncMetadataEnum.java
+++ 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterSyncMetadataEnum.java
@@ -31,6 +31,7 @@ import lombok.Getter;
 /**
  * 集群的特性
  */
+@Getter
 public enum ClusterSyncMetadataEnum {
 
 
@@ -81,7 +82,6 @@ public enum ClusterSyncMetadataEnum {
     ;
 
     private static final Map<ClusterType, ClusterSyncMetadata> 
SYNC_METADATA_CONCURRENT_HASH_MAP = new ConcurrentHashMap<>();
-    @Getter
     private ClusterSyncMetadata clusterSyncMetadata;
 
     ClusterSyncMetadataEnum(ClusterSyncMetadata clusterSyncMetadata) {
diff --git 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java
 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java
index af16214..103d5a7 100644
--- 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java
+++ 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/ClusterType.java
@@ -18,11 +18,15 @@
 
 package org.apache.eventmesh.dashboard.common.enums;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import lombok.Getter;
 
@@ -103,26 +107,26 @@ public enum ClusterType {
 
     EVENTMESH_CLUSTER(EVENTMESH, EVENTMESH, CLUSTER, DEFINITION, 
RemotingType.EVENT_MESH_RUNTIME),
 
-    EVENTMESH_RUNTIME(EVENTMESH, EVENTMESH, RUNTIME, DEFAULT, 
RemotingType.EVENT_MESH_RUNTIME),
+    EVENTMESH_RUNTIME(EVENTMESH, EVENTMESH_CLUSTER, RUNTIME, DEFAULT, 
RemotingType.EVENT_MESH_RUNTIME),
 
-    EVENTMESH_META_ETCD(EVENTMESH, EVENTMESH, META, META_TYPE_ETCD, 
RemotingType.EVENT_MESH_ETCD),
+    EVENTMESH_META_ETCD(EVENTMESH, EVENTMESH_CLUSTER, META, META_TYPE_ETCD, 
RemotingType.EVENT_MESH_ETCD),
 
-    EVENTMESH_META_NACOS(EVENTMESH, EVENTMESH, META, META_TYPE_NACOS, 
RemotingType.EVENT_MESH_NACOS),
+    EVENTMESH_META_NACOS(EVENTMESH, EVENTMESH_CLUSTER, META, META_TYPE_NACOS, 
RemotingType.EVENT_MESH_NACOS),
 
-    EVENTMESH_JVM_CLUSTER(EVENTMESH, EVENTMESH_JVM, CLUSTER, DEFINITION, 
RemotingType.EVENT_MESH_RUNTIME),
+    EVENTMESH_JVM_CLUSTER(EVENTMESH, EVENTMESH_JVM, CLUSTER, DEFINITION, 
RemotingType.JVM),
 
-    EVENTMESH_JVM_RUNTIME(EVENTMESH, EVENTMESH_JVM, RUNTIME, DEFAULT, 
RemotingType.EVENT_MESH_RUNTIME),
+    EVENTMESH_JVM_RUNTIME(EVENTMESH, EVENTMESH_JVM_CLUSTER, RUNTIME, DEFAULT, 
RemotingType.JVM),
 
-    EVENTMESH_JVM_META(EVENTMESH, EVENTMESH_JVM, META, META_TYPE_JVM, 
RemotingType.JVM),
+    EVENTMESH_JVM_META(EVENTMESH, EVENTMESH_JVM_CLUSTER, META, META_TYPE_JVM, 
RemotingType.JVM),
 
 
     STORAGE_ROCKETMQ(ClusterType.STORAGE.code + 1),
 
     STORAGE_ROCKETMQ_CLUSTER(STORAGE, STORAGE_ROCKETMQ, CLUSTER, DEFINITION, 
RemotingType.ROCKETMQ),
 
-    STORAGE_ROCKETMQ_NAMESERVER(STORAGE, STORAGE_ROCKETMQ, META, DEFAULT, 
RemotingType.ROCKETMQ_NAMESERVER),
+    STORAGE_ROCKETMQ_NAMESERVER(STORAGE, STORAGE_ROCKETMQ_CLUSTER, META, 
DEFAULT, RemotingType.ROCKETMQ_NAMESERVER),
 
-    STORAGE_ROCKETMQ_BROKER(STORAGE, STORAGE_ROCKETMQ, RUNTIME, DEFINITION, 
RemotingType.ROCKETMQ),
+    STORAGE_ROCKETMQ_BROKER(STORAGE, STORAGE_ROCKETMQ_CLUSTER, RUNTIME, 
DEFINITION, RemotingType.ROCKETMQ),
 
     STORAGE_ROCKETMQ_BROKER_MAIN_SLAVE(STORAGE, STORAGE_ROCKETMQ_BROKER, 
RUNTIME, DEFAULT, RemotingType.ROCKETMQ),
 
@@ -133,34 +137,34 @@ public enum ClusterType {
 
     STORAGE_KAFKA_CLUSTER(STORAGE, STORAGE_KAFKA, CLUSTER, DEFINITION, 
RemotingType.KAFKA),
 
-    STORAGE_KAFKA_ZK(STORAGE, STORAGE_KAFKA, META, META_TYPE_ZK, 
RemotingType.ZK),
+    STORAGE_KAFKA_ZK(STORAGE, STORAGE_KAFKA_CLUSTER, META, META_TYPE_ZK, 
RemotingType.ZK),
 
-    STORAGE_KAFKA_RAFT(STORAGE, STORAGE_KAFKA, META_AND_RUNTIME, 
STORAGE_KAFKA, RemotingType.KAFKA),
+    STORAGE_KAFKA_RAFT(STORAGE, STORAGE_KAFKA_CLUSTER, META_AND_RUNTIME, 
STORAGE_KAFKA, RemotingType.KAFKA),
 
-    STORAGE_KAFKA_BROKER(STORAGE, STORAGE_KAFKA, RUNTIME, DEFAULT, 
RemotingType.KAFKA),
+    STORAGE_KAFKA_BROKER(STORAGE, STORAGE_KAFKA_CLUSTER, RUNTIME, DEFAULT, 
RemotingType.KAFKA),
 
 
     STORAGE_REDIS(STORAGE_KAFKA.code + 1),
 
     STORAGE_REDIS_CLUSTER(STORAGE, STORAGE_REDIS, CLUSTER, DEFINITION, 
RemotingType.REDIS),
 
-    STORAGE_REDIS_BROKER(STORAGE, STORAGE_REDIS, RUNTIME, DEFAULT, 
RemotingType.REDIS),
+    STORAGE_REDIS_BROKER(STORAGE, STORAGE_REDIS_CLUSTER, RUNTIME, DEFAULT, 
RemotingType.REDIS),
 
     STORAGE_JVM(STORAGE_REDIS.code + 1),
 
     STORAGE_JVM_CLUSTER(STORAGE, STORAGE_JVM, CLUSTER, DEFINITION, 
RemotingType.JVM),
 
-    STORAGE_JVM_META(STORAGE, STORAGE_JVM, META, DEFAULT, RemotingType.JVM),
+    STORAGE_JVM_META(STORAGE, STORAGE_JVM_CLUSTER, META, DEFAULT, 
RemotingType.JVM),
 
-    STORAGE_JVM_BROKER(STORAGE, STORAGE_JVM, RUNTIME, DEFAULT, 
RemotingType.JVM),
+    STORAGE_JVM_BROKER(STORAGE, STORAGE_JVM_CLUSTER, RUNTIME, DEFAULT, 
RemotingType.JVM),
 
     STORAGE_JVM_CAP(STORAGE_REDIS.code + 1),
 
     STORAGE_JVM_CAP_CLUSTER(STORAGE, STORAGE_JVM_CAP, CLUSTER, DEFINITION, 
RemotingType.JVM),
 
-    STORAGE_JVM_CAP_BROKER(STORAGE, STORAGE_JVM_CAP, META_AND_RUNTIME, 
DEFAULT, RemotingType.JVM),
+    STORAGE_JVM_CAP_BROKER(STORAGE, STORAGE_JVM_CAP_CLUSTER, META_AND_RUNTIME, 
DEFAULT, RemotingType.JVM),
 
-    STORAGE_JVM_CAP_META(STORAGE, STORAGE_JVM_CAP, META, DEFAULT, 
RemotingType.JVM),
+    STORAGE_JVM_CAP_META(STORAGE, STORAGE_JVM_CAP_CLUSTER, META, DEFAULT, 
RemotingType.JVM),
     ;
 
 
@@ -172,8 +176,27 @@ public enum ClusterType {
 
     private static final List<ClusterType> STORAGE_META_RUNTIME_TYPE_LIST = 
new ArrayList<>();
 
+    private static final Map<ClusterType, ClusterTypeChild> 
CLUSTER_TYPE_CLUSTER_TYPE_CHILD_MAP = new HashMap<>();
+
     static {
         for (ClusterType clusterType : ClusterType.values()) {
+            if (Objects.isNull(clusterType.assemblyName)) {
+                continue;
+            }
+            ClusterTypeChild clusterTypeChild =
+                
CLUSTER_TYPE_CLUSTER_TYPE_CHILD_MAP.computeIfAbsent(clusterType.assemblyName, k 
-> new ClusterTypeChild());
+            clusterType.assemblyName.clusterTypeChild = clusterTypeChild;
+
+            clusterType.clusterTypeChild = 
CLUSTER_TYPE_CLUSTER_TYPE_CHILD_MAP.computeIfAbsent(clusterType, k -> new 
ClusterTypeChild());
+            if (clusterType.isMeta()) {
+                clusterTypeChild.metaClusterType.add(clusterType);
+            } else if (clusterType.isRuntime()) {
+                clusterTypeChild.runtimeClusterType.add(clusterType);
+            } else if (clusterType.isDefinition()) {
+                clusterTypeChild.definitionClusterType.add(clusterType);
+            } else if (clusterType.isCluster()) {
+                clusterTypeChild.clusterType.add(clusterType);
+            }
             if (clusterType.isStorageCluster()) {
                 STORAGE_MAIN_CLUSTER_TYPE_LIST.add(clusterType);
             }
@@ -186,6 +209,11 @@ public enum ClusterType {
             if (clusterType.isMetaAndRuntime()) {
                 STORAGE_META_RUNTIME_TYPE_LIST.add(clusterType);
             }
+
+        }
+        for (ClusterType clusterType : ClusterType.values()) {
+            clusterType.getHigher();
+            clusterType.injection();
         }
     }
 
@@ -217,6 +245,9 @@ public enum ClusterType {
     @Getter
     private int code;
     private ClusterType higherType;
+
+    private ClusterTypeChild clusterTypeChild;
+
     private List<ClusterType> mainClusterType;
     private List<ClusterType> metaClusterType;
     private List<ClusterType> runtimeClusterType;
@@ -274,6 +305,13 @@ public enum ClusterType {
         return this.assemblyNodeType.equals(META);
     }
 
+    public boolean isCluster() {
+        if (Objects.isNull(this.assemblyNodeType)) {
+            return false;
+        }
+        return this.assemblyNodeType.equals(CLUSTER);
+    }
+
     public boolean isMetaAndRuntime() {
         if (Objects.isNull(this.eventmeshNodeType)) {
             return false;
@@ -338,6 +376,18 @@ public enum ClusterType {
         return list;
     }
 
+    public List<ClusterType> getThisInAllRuntimeCluster() {
+        return this.clusterTypeChild.allRuntimeClusterType;
+    }
+
+    public List<ClusterType> getFrameworkInAllMetaCluster() {
+        return this.higherType.clusterTypeChild.allMetaClusterType;
+    }
+
+    public List<ClusterType> getFrameworkInAllRuntimeCluster() {
+        return this.higherType.clusterTypeChild.allRuntimeClusterType;
+    }
+
     public List<ClusterType> getMainClusterType() {
         return this.getThisClusterType(CLUSTER, this.mainClusterType, 
"mainClusterType");
 
@@ -351,30 +401,74 @@ public enum ClusterType {
         return this.getThisClusterType(RUNTIME, this.runtimeClusterType, 
"runtimeClusterType");
     }
 
+    void injection() {
+        if (Objects.isNull(this.clusterTypeChild)) {
+            return;
+        }
+        if (Objects.isNull(this.higherType)) {
+            return;
+        }
+        if (this.clusterTypeChild.isRuntimeAdd.get()) {
+            return;
+        }
+        if (Objects.equals(this.higherType, this)) {
+            this.clusterTypeChild.isRuntimeAdd.set(true);
+            return;
+        }
+        this.clusterTypeChild.isRuntimeAdd.set(true);
+        this.assemblyName.injection(List.of(this), this.assemblyNodeType);
+    }
+
+
+    void injection(List<ClusterType> list, ClusterType clusterType) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        if (Objects.equals(clusterType, META)) {
+            this.clusterTypeChild.allMetaClusterType.addAll(list);
+            return;
+        }
+        if (Objects.equals(clusterType, CLUSTER)) {
+            this.clusterTypeChild.allClusterType.addAll(list);
+            return;
+        }
+        if (Objects.equals(clusterType, RUNTIME)) {
+            this.clusterTypeChild.allRuntimeClusterType.addAll(list);
+        }
+        if (Objects.equals(this.higherType, this)) {
+            return;
+        }
+        this.assemblyName.injection(list, clusterType);
+    }
+
     /**
      *
      */
     public ClusterType getHigher() {
-        if (Objects.isNull(this.higherType)) {
-            for (ClusterType allClusterType : ClusterType.values()) {
-                if (!Objects.equals(allClusterType.eventmeshNodeType, 
this.eventmeshNodeType)
-                    || !Objects.equals(allClusterType.assemblyName, 
this.assemblyName)) {
-                    continue;
-                }
-                if (!Objects.equals(allClusterType.assemblyNodeType, CLUSTER)) 
{
-                    continue;
-                }
-                if (!Objects.equals(allClusterType.assemblyBusiness, 
DEFINITION)) {
-                    continue;
-                }
-                this.higherType = allClusterType;
+        if (Objects.nonNull(this.higherType)) {
+            return this.higherType;
+        }
+        if (this.code != 0) {
+            this.higherType = this;
+            return this.higherType;
+        }
+        if (this.eventmeshNodeType == DEFAULT) {
+            this.higherType = this;
+            return this.higherType;
+        }
+        if (Objects.isNull(this.assemblyName)) {
+            return this;
+        }
+        ClusterType assemblyName = this.assemblyName;
+        ClusterType lastAssemblyName = this;
+        for (; ; ) {
+            if (Objects.isNull(assemblyName.assemblyName)) {
+                this.higherType = lastAssemblyName;
                 break;
             }
-            if (Objects.isNull(this.higherType)) {
-                throw new RuntimeException("higher type is null, current 
type:" + this);
-            }
+            lastAssemblyName = assemblyName;
+            assemblyName = assemblyName.assemblyName;
         }
-
         return this.higherType;
     }
 
@@ -414,4 +508,24 @@ public enum ClusterType {
     }
 
 
+    static class ClusterTypeChild {
+
+        List<ClusterType> metaClusterType = new ArrayList<>();
+
+        List<ClusterType> runtimeClusterType = new ArrayList<>();
+
+        AtomicBoolean isRuntimeAdd = new AtomicBoolean(false);
+
+        List<ClusterType> definitionClusterType = new ArrayList<>();
+
+        List<ClusterType> clusterType = new ArrayList<>();
+
+        List<ClusterType> allClusterType = new ArrayList<>();
+
+        List<ClusterType> allMetaClusterType = new ArrayList<>();
+
+        List<ClusterType> allRuntimeClusterType = new ArrayList<>();
+
+    }
+
 }
diff --git 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/DeployStatusType.java
 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/DeployStatusType.java
index 79c047e..30e2a73 100644
--- 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/DeployStatusType.java
+++ 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/enums/DeployStatusType.java
@@ -112,6 +112,12 @@ public enum DeployStatusType {
 
     UPDATE_FULL_FAIL,
 
+    CHECKING,
+
+    CHECK_WAIT,
+
+    CHECKING_FAILED,
+
     PAUSE,
 
     PAUSE_WAIT,
diff --git 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/util/ClasspathScanner.java
 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/util/ClasspathScanner.java
index d57291b..2d92dbd 100644
--- 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/util/ClasspathScanner.java
+++ 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/util/ClasspathScanner.java
@@ -120,7 +120,7 @@ public class ClasspathScanner {
     }
 
     private String createLocationPattern() {
-        StringBuffer stringBuffer = new StringBuffer();
+        StringBuilder stringBuffer = new StringBuilder();
         stringBuffer.append("classpath*:./");
         this.baseString = base.getPackage().getName().replace('.', '/');
         stringBuffer.append(this.baseString);
diff --git 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/utils/ClusterTypeRelationship.java
 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/utils/ClusterTypeRelationship.java
index 3159cf3..8c7e03f 100644
--- 
a/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/utils/ClusterTypeRelationship.java
+++ 
b/eventmesh-dashboard-common/src/main/java/org/apache/eventmesh/dashboard/common/utils/ClusterTypeRelationship.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
+@Deprecated
 public class ClusterTypeRelationship {
 
     private static final ClusterTypeRelationship INSTANCE = new 
ClusterTypeRelationship();
diff --git a/eventmesh-dashboard-console/pom.xml 
b/eventmesh-dashboard-console/pom.xml
index 0ac59e5..7ec18a0 100644
--- a/eventmesh-dashboard-console/pom.xml
+++ b/eventmesh-dashboard-console/pom.xml
@@ -27,7 +27,6 @@
         <version>0.0.1-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.eventmesh.dashboard.console</groupId>
     <artifactId>eventmesh-dashboard-console</artifactId>
 
     <properties>
@@ -41,17 +40,17 @@
     <dependencies>
         <!-- EventMesh Dashboard modules -->
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.core</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-core</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.common</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-common</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.service</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-service</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
@@ -219,23 +218,6 @@
 
     <build>
         <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring-boot.version}</version>
-                <configuration>
-                    
<mainClass>org.apache.eventmesh.dashboard.console.EventMeshDashboardApplication</mainClass>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>repackage</id>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentActionController.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentActionController.java
index eaae346..56b2744 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentActionController.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentActionController.java
@@ -22,19 +22,29 @@ import 
org.apache.eventmesh.dashboard.common.enums.ClusterFramework;
 import org.apache.eventmesh.dashboard.common.enums.ClusterSyncMetadataEnum;
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 import org.apache.eventmesh.dashboard.common.enums.MetadataType;
+import org.apache.eventmesh.dashboard.console.domain.ClusterAndRuntimeDomain;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
-import 
org.apache.eventmesh.dashboard.console.model.DO.runtime.QueryRuntimeByBigExpandClusterDO;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeOfRelationshipDO;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryTreeByChildClusterIdDO;
 import 
org.apache.eventmesh.dashboard.console.model.dto.agent.AgentStartActionDTO;
 import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService;
 import org.apache.eventmesh.dashboard.console.service.cluster.RuntimeService;
 import org.apache.eventmesh.dashboard.console.service.function.ConfigService;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressManage;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressService;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressServiceIPDO;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressServiceResult;
+import 
org.apache.eventmesh.dashboard.console.utils.data.controller.agent.AgentActionControllerUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 
 import javax.validation.Valid;
 
@@ -60,6 +70,17 @@ public class AgentActionController {
     @Autowired
     private RuntimeService runtimeService;
 
+    @Autowired
+    private ClusterAndRuntimeDomain clusterAndRuntimeDomain;
+
+    @Autowired
+    private AddressManage addressManage;
+
+    /**
+     * TODO
+     *      启动时,无法确认其他服务是否启动
+     *      只有在不停地 check 时,可以确认依赖服务已经启动
+     */
     @PostMapping("agentStartAction")
     public AgentStartActionVO agentStartAction(@RequestBody @Valid 
AgentStartActionDTO data) {
 
@@ -82,37 +103,20 @@ public class AgentActionController {
         updateRuntimeEntity.setHost(data.getNodeAddress());
         updateRuntimeEntity.setPodHost(data.getLocalAddress());
         this.runtimeService.updateAddressByRuntimeId(updateRuntimeEntity);
-        // 识别架构,修改 需要 修改 config 相关配置 , 端口
-
-        // TODO 识别 架构方式,修改 cap 架构配置 ,
-
-        // 依赖组件,在 agentCheckRuntime ,
-
-        // 识别架构, 获得
 
         AgentStartActionVO agentStartActionVO = new AgentStartActionVO();
         
agentStartActionVO.setClusterType(clusterEntity.getClusterType().toString());
-        agentStartActionVO.setCheck(clusterEntity.getClusterType().isMeta());
-
-        ConfigEntity configEntity = new ConfigEntity();
-        configEntity.setInstanceId(clusterEntity.getId());
-        configEntity.setInstanceType(MetadataType.CLUSTER);
-        List<ConfigEntity> configEntityList = 
this.configService.queryByInstanceId(configEntity);
-        Map<String, String> configMap = new HashMap<String, String>();
-        configEntityList.forEach(config -> {
-            configMap.put(config.getConfigName(), config.getConfigValue());
-        });
-
-        configEntity = new ConfigEntity();
-        configEntity.setInstanceId(runtimeEntity.getId());
-        configEntity.setInstanceType(MetadataType.RUNTIME);
-        this.configService.queryByInstanceId(configEntity);
-        configEntityList.forEach(config -> {
-            configMap.put(config.getConfigName(), config.getConfigValue());
-        });
-
-        agentStartActionVO.setConfigMap(configMap);
-
+        ClusterType clusterType = clusterEntity.getClusterType();
+        ClusterSyncMetadataEnum.getClusterFramework(clusterType);
+        if (!clusterType.isMeta()) {
+            return agentStartActionVO;
+        }
+        ClusterFramework clusterFramework = 
ClusterSyncMetadataEnum.getClusterFramework(clusterType);
+        if (!clusterFramework.isAP()) {
+            return agentStartActionVO;
+        }
+        agentStartActionVO.setCheck(true);
+        agentStartActionVO.setConfigMap(this.queryConfig(runtimeEntity, 
clusterEntity));
         return agentStartActionVO;
 
     }
@@ -124,33 +128,85 @@ public class AgentActionController {
         clusterEntity.setId(data.getClusterId());
         clusterEntity = this.clusterService.queryClusterById(clusterEntity);
 
-        AgentCheckRuntimeVO agentCheckRuntimeVO = new AgentCheckRuntimeVO();
-
-        QueryRuntimeByBigExpandClusterDO queryRuntimeByBigExpandClusterDO =
-            
QueryRuntimeByBigExpandClusterDO.builder().followClusterId(clusterEntity.getId())
-                
.queryClusterTypeList(clusterEntity.getClusterType().getMetaClusterType()).build();
+        ClusterType clusterType = clusterEntity.getClusterType();
 
-        List<RuntimeEntity> runtimeEntityList = 
this.runtimeService.queryMetaRuntimeByStorageClusterId(queryRuntimeByBigExpandClusterDO);
+        AddressService addressService = 
addressManage.getAddressService(clusterType);
+        RuntimeEntity remoteRuntimeEntity = new RuntimeEntity();
+        remoteRuntimeEntity.setClusterId(clusterEntity.getId());
 
-        ClusterType clusterType = clusterEntity.getClusterType();
+        AddressServiceResult addressServiceResult = new AddressServiceResult();
         if (clusterType.isEventMethRuntime()) {
-            queryRuntimeByBigExpandClusterDO = 
QueryRuntimeByBigExpandClusterDO.builder().followClusterId(clusterEntity.getId())
-                
.storageMetaClusterTypeList(ClusterType.getStorageMetaRuntimeCluster()).build();
-            //如果是 eventmesh 集群,name需要查询 存储集群的 runtime 是否启动
-            // 如果识别 meta 的可用度
-            runtimeEntityList = 
this.runtimeService.queryRuntimeByBigExpandCluster(queryRuntimeByBigExpandClusterDO);
+            //
+            
this.clusterAndRuntimeDomain.getAllClusterAndRuntimeByCluster(null);
         } else {
             ClusterFramework clusterFramework = 
ClusterSyncMetadataEnum.getClusterFramework(clusterType);
-            if (clusterFramework.isCAP() && clusterType.isMeta()) {
-                //
+            if ((clusterFramework.isCAP() && clusterType.isMeta())) {
+                List<RuntimeEntity> runtimeEntities = 
this.runtimeService.queryRuntimeToFrontByClusterId(remoteRuntimeEntity);
+                addressServiceResult = 
addressService.createCapAddress(AgentActionControllerUtils.byRuntimeList(runtimeEntities));
             } else if (clusterType.isMetaAndRuntime()) {
-                //
+                List<RuntimeEntity> runtimeEntities = 
this.runtimeService.queryRuntimeToFrontByClusterId(remoteRuntimeEntity);
+                addressServiceResult = 
addressService.createCapAddress(AgentActionControllerUtils.byRuntimeList(runtimeEntities));
             } else if (clusterType.isRuntime()) {
-                //
+                // 需要 得到 集群的依赖组件检查依赖 runtime 是否运行
+                // 检查依赖 runtime 是否运行
+                QueryTreeByChildClusterIdDO queryTreeByChildClusterIdDO = new 
QueryTreeByChildClusterIdDO();
+                queryTreeByChildClusterIdDO.setClusterEntity(clusterEntity);
+                
queryTreeByChildClusterIdDO.setRootClusterTypeList(Set.of(clusterType.getHigher()));
+                queryTreeByChildClusterIdDO.setOnlyClusterTypeList(new 
HashSet<>(clusterType.getHigher().getMetaClusterType()));
+
+                ClusterAndRuntimeOfRelationshipDO 
clusterAndRuntimeOfRelationshipDo =
+                    
this.clusterAndRuntimeDomain.queryTreeByChildClusterId(queryTreeByChildClusterIdDO);
+                AddressServiceIPDO addressServiceDo =
+                    
AgentActionControllerUtils.byClusterAndRuntimeOfRelationshipDO(clusterAndRuntimeOfRelationshipDo);
+                addressServiceResult = 
addressService.createRegisterAddress(addressServiceDo);
             }
-
         }
-
+        AgentCheckRuntimeVO agentCheckRuntimeVO = new AgentCheckRuntimeVO();
+        if (!addressServiceResult.isCheckSuccess()) {
+            agentCheckRuntimeVO.setSuccess(false);
+        } else {
+            ClusterEntity tmpClusterEntity = clusterEntity;
+            // TODO 这个有一个问题,这些配置地址,是写入 cluster ,还是 写入 runtime, 写入 cluster
+            List<ConfigEntity> configEntityList = 
addressServiceResult.getConfigEntities().stream().filter((value) -> {
+                if (Objects.isNull(value.getConfigName())) {
+                    return false;
+                } else {
+                    value.setInstanceId(tmpClusterEntity.getId());
+                    value.setInstanceType(MetadataType.CLUSTER);
+                    return true;
+                }
+            }).toList();
+            this.configService.updateValueByConfigList(configEntityList);
+            
agentCheckRuntimeVO.setConfigMap(this.queryConfig(remoteRuntimeEntity, 
clusterEntity));
+        }
         return agentCheckRuntimeVO;
     }
+
+
+    private Map<String, String> queryConfig(RuntimeEntity runtimeEntity, 
ClusterEntity clusterEntity) {
+        List<ConfigEntity> queryConfigConfigList = new ArrayList<>(2);
+
+        ConfigEntity configEntity = new ConfigEntity();
+        configEntity.setInstanceId(clusterEntity.getId());
+        configEntity.setInstanceType(MetadataType.CLUSTER);
+
+        queryConfigConfigList.add(configEntity);
+
+        configEntity = new ConfigEntity();
+        configEntity.setInstanceId(runtimeEntity.getId());
+        configEntity.setInstanceType(MetadataType.RUNTIME);
+
+        queryConfigConfigList.add(configEntity);
+
+        Map<String, String> configMap = new HashMap<>();
+        queryConfigConfigList.forEach(value -> {
+            List<ConfigEntity> configEntityList = 
this.configService.queryByInstanceId(value);
+            configEntityList.forEach(config -> {
+                configMap.put(config.getConfigName(), config.getConfigValue());
+            });
+        });
+
+        return configMap;
+    }
+
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
index 09fdf5d..43ee2c6 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
@@ -17,6 +17,8 @@
 
 package org.apache.eventmesh.dashboard.console.controller.agent;
 
+import java.util.Map;
+
 import lombok.Data;
 
 @Data
@@ -24,4 +26,6 @@ public class AgentCheckRuntimeVO {
 
     private boolean success;
 
+    private Map<String, String> configMap;
+
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/ClusterCycleController.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/ClusterCycleController.java
index 619fa10..c0172ee 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/ClusterCycleController.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/ClusterCycleController.java
@@ -150,7 +150,7 @@ public class ClusterCycleController {
     }
 
     /**
-     * 这里应该上传一个文件
+     * 这里应该上传一个文件,可以通过前端把文件数据读出来,然后写入字段里面
      */
     @PostMapping("createClusterByFullMetadata")
     public void createClusterByFullMetadata(@RequestBody @Validated 
CreateClusterByFullMetadataDTO dto) {
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/CreateCycleService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/CreateCycleService.java
index 1dd887d..c9e6df0 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/CreateCycleService.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/CreateCycleService.java
@@ -29,6 +29,7 @@ import 
org.apache.eventmesh.dashboard.console.domain.metadata.ClusterMetadataDom
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import 
org.apache.eventmesh.dashboard.console.mapstruct.cluster.ClusterControllerMapper;
+import 
org.apache.eventmesh.dashboard.console.model.DO.service.function.config.CopyConfigDO;
 import 
org.apache.eventmesh.dashboard.console.model.dto.cluster.CreateClusterByCompleteDataDTO;
 import 
org.apache.eventmesh.dashboard.console.model.dto.cluster.CreateClusterBySimpleDataDTO;
 import 
org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshipService;
@@ -132,7 +133,9 @@ public class CreateCycleService {
         this.verifyName();
         this.clusterService.createCluster(clusterEntity);
         if (Objects.nonNull(configGatherId)) {
-            this.configService.copyConfig(configGatherId, 
clusterEntity.getId());
+            CopyConfigDO copyConfigDO = new CopyConfigDO();
+
+            //this.configService.copyConfig(configGatherId, 
clusterEntity.getId());
         }
     }
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/create/CreateClusterByDeployScriptHandler.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/create/CreateClusterByDeployScriptHandler.java
index 237e67d..c254e43 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/create/CreateClusterByDeployScriptHandler.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/deploy/create/CreateClusterByDeployScriptHandler.java
@@ -24,11 +24,13 @@ import 
org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType;
 import 
org.apache.eventmesh.dashboard.common.enums.ClusterTrusteeshipType.FirstToWhom;
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 import org.apache.eventmesh.dashboard.common.enums.DeployStatusType;
+import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 import org.apache.eventmesh.dashboard.common.enums.ReplicationType;
 import 
org.apache.eventmesh.dashboard.console.controller.deploy.handler.UpdateHandler;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import 
org.apache.eventmesh.dashboard.console.mapstruct.deploy.ClusterCycleControllerMapper;
+import 
org.apache.eventmesh.dashboard.console.model.DO.service.function.config.CopyConfigDO;
 import 
org.apache.eventmesh.dashboard.console.model.deploy.create.CreateClusterByDeployScriptDO;
 import 
org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshipService;
 import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService;
@@ -79,14 +81,21 @@ public class CreateClusterByDeployScriptHandler implements 
UpdateHandler<CreateC
 
         this.clusterService.insertCluster(this.clusterEntity);
         this.handlerMetadata(this.clusterEntity);
-        if 
(Objects.nonNull(createClusterByDeployScriptDO.getConfigGatherId())) {
-            
configService.copyConfig(createClusterByDeployScriptDO.getConfigGatherId(), 
this.clusterEntity.getId());
-        }
+
         if (this.clusterFramework.isMainSlave()) {
             this.mainSlaveHandler(createClusterByDeployScriptDO, 
this.clusterEntity);
         } else {
             this.ordinaryRuntime(createClusterByDeployScriptDO);
         }
+        // TODO #1111
+        if 
(Objects.nonNull(createClusterByDeployScriptDO.getConfigGatherId())) {
+            CopyConfigDO copyConfigDO = new CopyConfigDO();
+            
copyConfigDO.setSourceId(createClusterByDeployScriptDO.getConfigGatherId());
+            
copyConfigDO.setSourceType(createClusterByDeployScriptDO.getConfigGatherType());
+            
copyConfigDO.setTargetId(createClusterByDeployScriptDO.getConfigGatherId());
+            copyConfigDO.setTargetType(MetadataType.CLUSTER);
+            configService.copyConfig(copyConfigDO);
+        }
 
         this.runtimeService.batchInsert(this.runtimeEntityList);
     }
@@ -109,6 +118,7 @@ public class CreateClusterByDeployScriptHandler implements 
UpdateHandler<CreateC
             ClusterEntity newClusterEntity = 
ClusterCycleControllerMapper.INSTANCE.createClusterByDeployScript(createClusterByDeployScriptDO);
             clusterEntityList.add(newClusterEntity);
         }
+        // TODO 添加失败,如何处理
         this.clusterService.batchInsert(clusterEntityList, clusterEntity);
         clusterEntityList.forEach(entity -> {
             this.createRuntimeEntity(clusterEntity, ReplicationType.MAIN, 0);
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomain.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomain.java
index 9138fa6..1a2e145 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomain.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomain.java
@@ -25,10 +25,12 @@ import 
org.apache.eventmesh.dashboard.common.model.metadata.ClusterMetadata;
 import org.apache.eventmesh.dashboard.common.model.metadata.RuntimeMetadata;
 import org.apache.eventmesh.dashboard.console.entity.base.BaseRuntimeIdEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeDomainQO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeOfRelationshipDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.GetClusterInSyncReturnDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryClusterInSyncDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryClusterTreeDO;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryTreeByChildClusterIdDO;
 import org.apache.eventmesh.dashboard.console.model.vo.cluster.ClusterTreeVO;
 
 import java.util.ArrayList;
@@ -50,6 +52,12 @@ public interface ClusterAndRuntimeDomain {
 
     ClusterAndRuntimeOfRelationshipDO 
getAllClusterAndRuntimeByCluster(ClusterEntity clusterEntity, DeployStatusType 
deployStatusType);
 
+    ClusterAndRuntimeOfRelationshipDO 
getAllClusterAndRuntimeByCluster(ClusterAndRuntimeDomainQO data);
+
+
+    ClusterAndRuntimeOfRelationshipDO 
queryTreeByChildClusterId(QueryTreeByChildClusterIdDO data);
+
+
     GetClusterInSyncReturnDO queryClusterInSync(ClusterEntity clusterEntity, 
List<ClusterType> syncClusterTypeList);
 
     default <T> T queryClusterInSync(QueryClusterInSyncDO data) {
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/Impl/ClusterAndRuntimeDomainImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/Impl/ClusterAndRuntimeDomainImpl.java
index 8ff4463..f74e318 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/Impl/ClusterAndRuntimeDomainImpl.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/domain/Impl/ClusterAndRuntimeDomainImpl.java
@@ -30,24 +30,31 @@ import 
org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import 
org.apache.eventmesh.dashboard.console.mapstruct.model.entity.ClusterEntityMapstruct;
 import 
org.apache.eventmesh.dashboard.console.mapstruct.model.entity.RuntimeEntityMapstruct;
 import 
org.apache.eventmesh.dashboard.console.model.DO.clusterRelationship.QueryListByClusterIdAndTypeDO;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeDomainQO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeOfRelationshipDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.GetClusterInSyncReturnDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryClusterTreeDO;
-import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndType;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryTreeByChildClusterIdDO;
+import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndTypeQO;
 import org.apache.eventmesh.dashboard.console.model.vo.cluster.ClusterTreeVO;
 import 
org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshipService;
 import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService;
 import org.apache.eventmesh.dashboard.console.service.cluster.RuntimeService;
 import 
org.apache.eventmesh.dashboard.console.service.connector.ResourcesConfigService;
 
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -68,6 +75,7 @@ import lombok.Setter;
  *          1. 部署 需要整体关系
  *          2. 运维 只需要 可操作节点
  *          3. 关系可视化 需要整体关系
+ *          4. address 生产
  */
 @Component
 public class ClusterAndRuntimeDomainImpl implements ClusterAndRuntimeDomain {
@@ -104,7 +112,9 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
     }
 
     /**
-     * 这个方法是否放到 controller 层
+     * 这个方法是否放到 controller 层,
+     * TODO
+     *      还需要反向 tree
      */
     public List<ClusterTreeVO> 
queryClusterTree(ClusterAndRuntimeOfRelationshipDO data) {
         Map<Long, ClusterTreeVO> clusterIdMap = 
data.getClusterEntityList().stream().collect(Collectors.toMap(ClusterEntity::getId,
@@ -133,10 +143,13 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
     }
 
     /**
-     * 运维操作使用列表:</p>
+     * 网络地址组操作</p>
+     *
+     * @see 
org.apache.eventmesh.dashboard.console.controller.agent.AgentActionController
+     * <p>
+     * 运维操作使用列表:
      * <p>
      * 部署操作使用列表:</p>
-     *
      * @see 
org.apache.eventmesh.dashboard.console.controller.deploy.uninstall.UninstallClusterHandler
      * @see 
org.apache.eventmesh.dashboard.console.controller.deploy.create.CreateClusterByCopyHandler
      * @see 
org.apache.eventmesh.dashboard.console.controller.deploy.relationship.RelationshipHandler
@@ -151,6 +164,27 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
         return getSyncObjectHandler.deploy();
     }
 
+    @Override
+    public ClusterAndRuntimeOfRelationshipDO 
getAllClusterAndRuntimeByCluster(ClusterAndRuntimeDomainQO data) {
+        GetSyncObjectHandler getSyncObjectHandler = new GetSyncObjectHandler();
+        getSyncObjectHandler.setClusterEntity(data.getClusterEntity());
+        getSyncObjectHandler.setDeployStatusType(data.getDeployStatusType());
+        
getSyncObjectHandler.setSyncClusterTypeList(data.getOnlyClusterTypeList());
+        return getSyncObjectHandler.deploy();
+    }
+
+    @Override
+    public ClusterAndRuntimeOfRelationshipDO 
queryTreeByChildClusterId(QueryTreeByChildClusterIdDO data) {
+        ReverseSearchHandler reverseSearchHandler = new ReverseSearchHandler();
+        reverseSearchHandler.queryTreeByChildClusterIdDO = data;
+        List<ClusterEntity> clusterEntityList = 
reverseSearchHandler.doReverseSearch();
+
+        GetSyncObjectHandler getSyncObjectHandler = new GetSyncObjectHandler();
+        getSyncObjectHandler.setQueryClusterEntityList(clusterEntityList);
+        getSyncObjectHandler.setSyncClusterTypeList(new 
ArrayList<>(data.getOnlyClusterTypeList()));
+        return getSyncObjectHandler.deploy();
+    }
+
 
     /**
      * 修改配置只能在一个维度的进行操作 topic 需要对 eventmesh 与 存储同时进行操作, acl 需要多维度操作,还是? offset 
的操作 按照具体 offset,只能操作 队列 级别 按照 最大或则最小 和 时间,可以 是 大集群 或则 全域操作 定义操作域
@@ -164,20 +198,100 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
         return getSyncObjectHandler.sync();
     }
 
+    private class ReverseSearchHandler {
+
+        private QueryTreeByChildClusterIdDO queryTreeByChildClusterIdDO;
+
+        private List<ClusterRelationshipEntity> tmpList;
+
+        private void reverseSearch() {
+            List<ClusterEntity> list = this.doReverseSearch();
+
+        }
+
+
+        private List<ClusterEntity> doReverseSearch() {
+
+            List<ClusterRelationshipEntity> clusterRelationshipEntityList = 
this.queryAllClusterRelationshipEntity();
+
+            Map<Long, List<ClusterRelationshipEntity>> clusterRelationshipMap =
+                
clusterRelationshipEntityList.stream().collect(Collectors.groupingBy(ClusterRelationshipEntity::getRelationshipId));
+            List<ClusterEntity> idList = new ArrayList<>();
+            Consumer<ClusterRelationshipEntity> clusterRelationshipConsumer =
+                
this.createHandlerClusterRelationshipEntityConsumer(clusterRelationshipMap, 
idList);
+
+            List<ClusterRelationshipEntity> newList = 
clusterRelationshipMap.get(queryTreeByChildClusterIdDO.getClusterEntity().getId());
+            while (CollectionUtils.isNotEmpty(newList)) {
+                tmpList = new ArrayList<>();
+                newList.forEach(clusterRelationshipConsumer);
+                newList = tmpList;
+            }
+            return idList;
+        }
+
+        private Consumer<ClusterRelationshipEntity> 
createHandlerClusterRelationshipEntityConsumer(
+            Map<Long, List<ClusterRelationshipEntity>> clusterRelationshipMap,
+            List<ClusterEntity> idList) {
+            Set<ClusterType> rootClusterTypeList = 
queryTreeByChildClusterIdDO.getRootClusterTypeList();
+            return (value) -> {
+                if (Objects.nonNull(rootClusterTypeList) && 
rootClusterTypeList.contains(value.getClusterType())) {
+                    ClusterEntity clusterEntity = new ClusterEntity();
+                    clusterEntity.setId(value.getClusterId());
+                    clusterEntity.setClusterType(value.getClusterType());
+                    idList.add(clusterEntity);
+                    return;
+                }
+                List<ClusterRelationshipEntity> list = 
clusterRelationshipMap.get(value.getClusterId());
+                if (CollectionUtils.isEmpty(list)) {
+                    ClusterEntity clusterEntity = new ClusterEntity();
+                    clusterEntity.setId(value.getClusterId());
+                    clusterEntity.setClusterType(value.getClusterType());
+                    idList.add(clusterEntity);
+                } else {
+                    tmpList.addAll(list);
+                }
+            };
+        }
+
+        private List<ClusterRelationshipEntity> 
queryAllClusterRelationshipEntity() {
+            QueryListByClusterIdAndTypeDO queryListByClusterIdAndTypeDO = new 
QueryListByClusterIdAndTypeDO();
+            
queryListByClusterIdAndTypeDO.setClusterIdList(List.of(this.queryTreeByChildClusterIdDO.getClusterEntity().getId()));
+            List<ClusterRelationshipEntity> clusterRelationshipEntityList = 
new ArrayList<>();
+            for (; ; ) {
+                List<ClusterRelationshipEntity> newList = 
clusterRelationshipService.queryListByRelationshipList(queryListByClusterIdAndTypeDO);
+                if (CollectionUtils.isEmpty(newList)) {
+                    break;
+                }
+                clusterRelationshipEntityList.addAll(newList);
+                List<Long> idList = 
newList.stream().map(ClusterRelationshipEntity::getClusterId).toList();
+                queryListByClusterIdAndTypeDO.setClusterIdList(idList);
+            }
+            return clusterRelationshipEntityList;
+        }
+    }
+
     class GetSyncObjectHandler {
 
-        private final List<ClusterRelationshipEntity> 
clusterRelationshipEntityList = new ArrayList<>();
+        private List<ClusterRelationshipEntity> clusterRelationshipEntityList 
= new ArrayList<>();
+
         @Setter
         private ClusterEntity clusterEntity;
+
+        @Setter
+        private List<ClusterEntity> queryClusterEntityList;
+
         @Setter
         private DeployStatusType deployStatusType;
+
         private ClusterType clusterType;
         /**
          * 修改 eventmesh 空间下 所有 存储集群
          */
         @Setter
         private List<ClusterType> syncClusterTypeList;
-        private List<ClusterEntity> independenceClusterList = new 
ArrayList<>();
+
+        private final List<ClusterEntity> independenceClusterList = new 
ArrayList<>();
+
         private List<ClusterEntity> clusterEntityList = new ArrayList<>();
 
         private List<ClusterEntity> capClusterList = new ArrayList<>();
@@ -185,15 +299,17 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
         private List<RuntimeEntity> runtimeList;
 
         private void base(boolean isSync) {
-            this.clusterEntity = 
clusterService.queryClusterById(clusterEntity);
-            this.clusterType = clusterEntity.getClusterType();
-            ClusterFramework clusterFramework = 
ClusterSyncMetadataEnum.getClusterFramework(clusterEntity.getClusterType());
-            if (clusterFramework.isCAP() && isSync) {
-                return;
-            }
-            if (this.clusterType.isRuntime()) {
-                this.queryRuntimeByClusterId();
-                return;
+            if (Objects.nonNull(clusterEntity)) {
+                this.clusterEntity = 
clusterService.queryClusterById(clusterEntity);
+                this.clusterType = clusterEntity.getClusterType();
+                ClusterFramework clusterFramework = 
ClusterSyncMetadataEnum.getClusterFramework(clusterEntity.getClusterType());
+                if (clusterFramework.isCAP() && isSync) {
+                    return;
+                }
+                if (this.clusterType.isRuntime()) {
+                    this.queryRuntimeByClusterId();
+                    return;
+                }
             }
             this.queryClusterRelationship();
             this.queryClusterByRelationship();
@@ -219,7 +335,7 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
 
         public ClusterAndRuntimeOfRelationshipDO deploy() {
             this.base(false);
-            if (this.clusterType.isRuntime()) {
+            if (Objects.nonNull(this.clusterType) && 
this.clusterType.isRuntime()) {
                 ClusterAndRuntimeOfRelationshipDO 
clusterAndRuntimeOfRelationshipDO = 
this.createClusterAndRuntimeOfRelationshipDO();
                 
clusterAndRuntimeOfRelationshipDO.getRuntimeEntityPairList().add(Pair.of(this.clusterEntity,
 this.runtimeList));
                 return clusterAndRuntimeOfRelationshipDO;
@@ -229,7 +345,6 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
             return this.structureRelationship();
         }
 
-
         public GetClusterInSyncReturnDO sync() {
             this.base(true);
             if (this.clusterType.isRuntime()) {
@@ -327,6 +442,7 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
 
         }
 
+        @Deprecated
         public void getEventSpace() {
             /*
                 查询 eventmesh 集群 里面 eventmesh 相关集群
@@ -343,6 +459,7 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
             List<ClusterEntity> clusterEntityList = 
clusterService.queryStorageClusterByEventMeshId(clusterEntity);
         }
 
+        @Deprecated
         public void getDefinition() {
             // 查询是否存
             List<ClusterEntity> reationClusterList = 
clusterService.queryRelationClusterByClusterIdAndType(clusterEntity);
@@ -360,8 +477,8 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
                 }
             });
             if (definitionClusterList.isEmpty()) {
-                QueryRelationClusterByClusterIdListAndType 
queryRelationClusterByClusterIdListAndType =
-                    new QueryRelationClusterByClusterIdListAndType();
+                QueryRelationClusterByClusterIdListAndTypeQO 
queryRelationClusterByClusterIdListAndType =
+                    new QueryRelationClusterByClusterIdListAndTypeQO();
                 
queryRelationClusterByClusterIdListAndType.setClusterEntityList(definitionClusterList);
                 
queryRelationClusterByClusterIdListAndType.setClusterTypeList(syncClusterTypeList);
                 List<ClusterEntity> definitionQueryRelustClusternList =
@@ -417,16 +534,23 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
 
         private void queryClusterRelationship() {
             QueryListByClusterIdAndTypeDO queryListByClusterIdAndTypeDO = new 
QueryListByClusterIdAndTypeDO();
-            
queryListByClusterIdAndTypeDO.setClusterId(this.clusterEntity.getId());
-            
queryListByClusterIdAndTypeDO.setClusterTypeList(this.syncClusterTypeList);
-
-            /*
-             *  TODO 只能通过 代码 过滤需要的 clusterType, 除非 能从 syncClusterTypeList 得到 
DEFINITION 与 目标类型
-             *       前端如何操作,
-             */
-            List<ClusterRelationshipEntity> relationshipEntityList =
-                
clusterRelationshipService.queryListByClusterIdAndType(queryListByClusterIdAndTypeDO);
-            this.clusterRelationshipEntityList.addAll(relationshipEntityList);
+            List<ClusterRelationshipEntity> relationshipEntityList;
+            if (Objects.nonNull(this.clusterEntity)) {
+                
queryListByClusterIdAndTypeDO.setClusterId(this.clusterEntity.getId());
+                /*
+                 *  TODO 只能通过 代码 过滤需要的 clusterType, 除非 能从 syncClusterTypeList 
得到 DEFINITION 与 目标类型
+                 *       前端如何操作,
+                 */
+                relationshipEntityList =
+                    
clusterRelationshipService.queryListByClusterIdAndType(queryListByClusterIdAndTypeDO);
+                
this.clusterRelationshipEntityList.addAll(relationshipEntityList);
+            } else {
+                relationshipEntityList = new LinkedList<>();
+                this.queryClusterEntityList.forEach(value -> {
+                    ClusterRelationshipEntity clusterRelationshipEntity = new 
ClusterRelationshipEntity();
+                    clusterRelationshipEntity.setRelationshipId(value.getId());
+                });
+            }
             for (; ; ) {
                 List<Long> idList = 
relationshipEntityList.stream().map(ClusterRelationshipEntity::getRelationshipId).toList();
                 queryListByClusterIdAndTypeDO.setClusterIdList(idList);
@@ -436,6 +560,18 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
                 }
                 
this.clusterRelationshipEntityList.addAll(relationshipEntityList);
             }
+            if (Objects.isNull(this.syncClusterTypeList)) {
+                return;
+            }
+            Set<ClusterType> clusterTypeSet = new 
HashSet<>(this.syncClusterTypeList);
+            List<ClusterRelationshipEntity> newList = new ArrayList<>();
+            this.clusterRelationshipEntityList.forEach(value -> {
+                if (clusterTypeSet.contains(value.getRelationshipType())) {
+                    newList.add(value);
+                }
+            });
+            this.clusterRelationshipEntityList = newList;
+
         }
 
         /**
@@ -444,8 +580,8 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
          */
         private void queryCluster() {
             // 构建第一次查询对象
-            QueryRelationClusterByClusterIdListAndType 
queryRelationClusterByClusterIdListAndType =
-                new QueryRelationClusterByClusterIdListAndType();
+            QueryRelationClusterByClusterIdListAndTypeQO 
queryRelationClusterByClusterIdListAndType =
+                new QueryRelationClusterByClusterIdListAndTypeQO();
             
queryRelationClusterByClusterIdListAndType.setClusterTypeList(syncClusterTypeList);
             List<ClusterEntity> clusterEntityList = new ArrayList<>();
             
queryRelationClusterByClusterIdListAndType.setClusterEntityList(clusterEntityList);
@@ -467,7 +603,7 @@ public class ClusterAndRuntimeDomainImpl implements 
ClusterAndRuntimeDomain {
                         /*
                          *目前来说 definition 的 storage 集群 只有 rocketmq(还有关系型数据库),
                          *如果认为 definition 即 主从集群,那么认 definition
-                        */
+                         */
                         definitionClusterList.add(value);
                     } else {
                         ClusterFramework clusterFramework = 
ClusterSyncMetadataEnum.getClusterFramework(value.getClusterType());
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigEntity.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigEntity.java
index 43bfb03..f9a2080 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigEntity.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigEntity.java
@@ -35,6 +35,7 @@ public class ConfigEntity extends BaseRuntimeIdEntity {
 
     /**
      * config type 0:runtime,1:storage,2:connector,3:topic
+     * CONFIG is ConfigTemplate
      */
     private MetadataType instanceType;
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigTemplateEntity.java
similarity index 71%
copy from 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigTemplateEntity.java
index adcb679..5e17710 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/entity/function/ConfigTemplateEntity.java
@@ -15,39 +15,25 @@
  * limitations under the License.
  */
 
-
-package org.apache.eventmesh.dashboard.console.model.deploy.create;
+package org.apache.eventmesh.dashboard.console.entity.function;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.common.enums.MetadataType;
+import 
org.apache.eventmesh.dashboard.console.entity.base.BaseOrganizationEntity;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class CreateClusterByDeployScriptDO extends 
CreateRuntimeByDeployScriptDO {
-
-
-    private String name;
-
-    private Long configGatherId;
+public class ConfigTemplateEntity extends BaseOrganizationEntity {
 
     private ClusterType clusterType;
 
     private String version;
 
-    private String jmxProperties;
-
-    private String description;
+    private MetadataType metadataType;
 
-    private Integer authType;
-
-    private Integer runState;
-
-    private Long k8sClusterId;
-
-    private Long deployScriptId;
-
-    private Long resourcesConfigId;
+    private String name;
 
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java
index 048b557..52ce7ee 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterMapper.java
@@ -20,7 +20,7 @@ package org.apache.eventmesh.dashboard.console.mapper.cluster;
 
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.model.ClusterIdDTO;
-import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndType;
+import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndTypeQO;
 
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
@@ -80,7 +80,7 @@ public interface ClusterMapper {
         </script>
         """)
     List<ClusterEntity> queryRelationClusterByClusterIdListAndType(
-        QueryRelationClusterByClusterIdListAndType 
queryRelationClusterByClusterIdListAndType);
+        QueryRelationClusterByClusterIdListAndTypeQO 
queryRelationClusterByClusterIdListAndType);
 
 
     @Select("""
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java
index 2a32b64..b306ea1 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/ClusterRelationshipMapper.java
@@ -62,7 +62,7 @@ public interface ClusterRelationshipMapper {
     @Select("""
         <script>
             select *  from cluster_relationship where cluster_id = #{clusterId}
-                <if test = "clusterTypeList != null">
+                <if test = "relationshipTypeList != null">
                      and relationship_type in
                      <foreach item='item' index='index' 
collection='relationshipTypeList'  open="(" separator=',' close=")">
                         #{item}
@@ -72,6 +72,22 @@ public interface ClusterRelationshipMapper {
         """)
     List<ClusterRelationshipEntity> 
queryListByClusterIdAndType(QueryListByClusterIdAndTypeDO data);
 
+    @Select("""
+        <script>
+            select *  from cluster_relationship where relationship_id
+                <foreach collection='clusterIdList' item='item' index='index' 
open='in(' separator=',' close=')'>
+                    #{item}
+                </foreach>
+                <if test = "clusterTypeList != null">
+                     and relationship_type in
+                     <foreach item='item' index='index' 
collection='clusterTypeList'  open="(" separator=',' close=")">
+                        #{item}
+                    </foreach>
+                </if>
+        </script>
+        """)
+    List<ClusterRelationshipEntity> 
queryListByRelationshipList(QueryListByClusterIdAndTypeDO data);
+
 
     @Select("""
         <script>
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/RuntimeMapper.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/RuntimeMapper.java
index 38664e2..b82133c 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/RuntimeMapper.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/cluster/RuntimeMapper.java
@@ -144,6 +144,12 @@ public interface RuntimeMapper extends 
SyncDataHandlerMapper<RuntimeEntity> {
     @Select("select * from runtime where status=1")
     List<RuntimeEntity> queryAll();
 
+
+    @Update("""
+            update runtime set port=#{port} where id=#{id}
+        """)
+    Integer updatePortByRuntimeId(RuntimeEntity runtimeEntity);
+
     @Update("""
         <script>
              <foreach item='item'  separator=';' >
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigMapper.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigMapper.java
index b96bb8c..d73fe40 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigMapper.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigMapper.java
@@ -22,11 +22,11 @@ import 
org.apache.eventmesh.dashboard.common.enums.MetadataType;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
 import org.apache.eventmesh.dashboard.console.mapper.SyncDataHandlerMapper;
+import 
org.apache.eventmesh.dashboard.console.model.QO.function.config.CopyConfigQO;
 
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Options;
-import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
@@ -135,7 +135,7 @@ public interface ConfigMapper extends 
SyncDataHandlerMapper<ConfigEntity> {
 
 
     @Insert("insert into config () select *,#{targetId} as cluster_id from 
config where clster where cluster_id = #{sourceId}")
-    void copyConfig(@Param("sourceId") Long sourceId, @Param("targetId") Long 
targetId);
+    void copyConfig(CopyConfigQO data);
 
     @Insert("INSERT INTO config (cluster_id, business_type, instance_type, 
instance_id, config_name, config_value, "
             + "status, is_default,  diff_type, description, edit, 
is_modify,start_version,"
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigTemplateMapper.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigTemplateMapper.java
new file mode 100644
index 0000000..6028f30
--- /dev/null
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/mapper/function/ConfigTemplateMapper.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ *
+ *     http://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.eventmesh.dashboard.console.mapper.function;
+
+import 
org.apache.eventmesh.dashboard.console.entity.function.ConfigTemplateEntity;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ *
+ */
+@Mapper
+public interface ConfigTemplateMapper {
+
+    @Insert("""
+            insert into 
config_template(cluster_type,version,metadata_type,metadata_type,name)
+            values(#{clusterType},#{version},#{metadataType},#{name})
+        """)
+    void insertConfigTemplate(ConfigTemplateEntity configTemplateEntity);
+
+    @Select("""
+            select * from config_template where organization_id = 
#{organizationId}
+                <if test="metadataType != null">
+                    and metadata_type=#{metadataType}
+                </if>
+        """)
+    List<ConfigTemplateEntity> 
queryConfigTemplateByClusterType(ConfigTemplateEntity configTemplateEntity);
+}
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeDomainQO.java
similarity index 64%
copy from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeDomainQO.java
index fa38abd..6bf15af 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeDomainQO.java
@@ -15,34 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.core.function.multinetwork;
+package 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.common.enums.DeployStatusType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
+
+import java.util.List;
 
 import lombok.Data;
 
-/**
- *  申请端口必须连续,这点需要 组件支持端口的配置
- */
 @Data
-public class PortMetadata {
-
-    private ClusterType clusterType;
-
-    private String configName;
-
-    private String protocol = "TCP";
-
-    private String effect = "client";
-
-    private Integer port;
+public class ClusterAndRuntimeDomainQO {
 
-    private boolean required = true;
+    private ClusterEntity clusterEntity;
 
-    private boolean virtual = false;
+    private DeployStatusType deployStatusType;
 
-    private boolean nullPort  = false;
+    private List<ClusterType> onlyClusterTypeList;
 
-    private String explanation;
 
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeOfRelationshipDO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeOfRelationshipDO.java
index 4d20802..6a5f033 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeOfRelationshipDO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/ClusterAndRuntimeOfRelationshipDO.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain;
 
+import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 import 
org.apache.eventmesh.dashboard.console.entity.cases.ResourcesConfigEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
@@ -31,6 +32,8 @@ import org.apache.commons.lang3.tuple.Triple;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import lombok.Data;
 
@@ -60,4 +63,18 @@ public class ClusterAndRuntimeOfRelationshipDO {
     private List<Pair<ClusterEntity, List<ResourcesConfigEntity>>> 
clusterResourcesList;
 
     private List<Pair<ClusterEntity, Pair<RuntimeEntity, 
ResourcesConfigEntity>>> resourceData;
+
+    private Map<ClusterType, List<RuntimeEntity>> clusterTypeMapMap;
+
+    public Map<Long, List<RuntimeEntity>> 
getRuntimeEntityByClusterType(ClusterType clusterType) {
+        if (Objects.isNull(clusterTypeMapMap)) {
+            this.clusterTypeMapMap = 
this.runtimeEntityList.stream().collect(Collectors.groupingBy(RuntimeEntity::getClusterType));
+
+        }
+        List<RuntimeEntity> list = this.clusterTypeMapMap.get(clusterType);
+        if (Objects.isNull(list)) {
+            return null;
+        }
+        return 
list.stream().collect(Collectors.groupingBy(RuntimeEntity::getClusterId));
+    }
 }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/QueryTreeByChildClusterIdDO.java
similarity index 64%
copy from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/QueryTreeByChildClusterIdDO.java
index fa38abd..7c80dcb 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/domain/clusterAndRuntimeDomain/QueryTreeByChildClusterIdDO.java
@@ -15,34 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.core.function.multinetwork;
+package 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.common.enums.DeployStatusType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
+
+import java.util.Set;
 
 import lombok.Data;
 
-/**
- *  申请端口必须连续,这点需要 组件支持端口的配置
- */
 @Data
-public class PortMetadata {
-
-    private ClusterType clusterType;
-
-    private String configName;
-
-    private String protocol = "TCP";
-
-    private String effect = "client";
+public class QueryTreeByChildClusterIdDO {
 
-    private Integer port;
 
-    private boolean required = true;
+    private ClusterEntity clusterEntity;
 
-    private boolean virtual = false;
+    private DeployStatusType deployStatusType;
 
-    private boolean nullPort  = false;
+    private Set<ClusterType> onlyClusterTypeList;
 
-    private String explanation;
+    private Set<ClusterType> rootClusterTypeList;
 
 }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/EtcdConnectionCore.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/service/function/config/CopyConfigDO.java
similarity index 70%
rename from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/EtcdConnectionCore.java
rename to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/service/function/config/CopyConfigDO.java
index 644783c..e133a1b 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/EtcdConnectionCore.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/DO/service/function/config/CopyConfigDO.java
@@ -15,14 +15,21 @@
  * limitations under the License.
  */
 
+package 
org.apache.eventmesh.dashboard.console.model.DO.service.function.config;
 
-package org.apache.eventmesh.dashboard.core.meta.connection;
+import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 
-import org.apache.eventmesh.dashboard.service.meta.ConnectionCore;
+import lombok.Data;
 
-import lombok.extern.slf4j.Slf4j;
+@Data
+public class CopyConfigDO {
 
-@Slf4j
-public class EtcdConnectionCore implements ConnectionCore {
+    private MetadataType sourceType;
+
+    private Long sourceId;
+
+    private MetadataType targetType;
+
+    private Long targetId;
 
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/cluster/QueryRelationClusterByClusterIdListAndTypeQO.java
similarity index 68%
copy from 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/cluster/QueryRelationClusterByClusterIdListAndTypeQO.java
index 09fdf5d..8b5c938 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/controller/agent/AgentCheckRuntimeVO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/cluster/QueryRelationClusterByClusterIdListAndTypeQO.java
@@ -15,13 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console.controller.agent;
+package org.apache.eventmesh.dashboard.console.model.QO.cluster;
+
+import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
+
+import java.util.List;
 
 import lombok.Data;
 
 @Data
-public class AgentCheckRuntimeVO {
+public class QueryRelationClusterByClusterIdListAndTypeQO {
+
+    private List<ClusterType> clusterTypeList;
 
-    private boolean success;
+    private List<ClusterEntity> clusterEntityList;
 
 }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/NacosConnectionCore.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/function/config/CopyConfigQO.java
similarity index 71%
rename from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/NacosConnectionCore.java
rename to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/function/config/CopyConfigQO.java
index ae94f67..91b902c 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/meta/connection/NacosConnectionCore.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/QO/function/config/CopyConfigQO.java
@@ -15,14 +15,21 @@
  * limitations under the License.
  */
 
+package org.apache.eventmesh.dashboard.console.model.QO.function.config;
 
-package org.apache.eventmesh.dashboard.core.meta.connection;
+import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 
-import org.apache.eventmesh.dashboard.service.meta.ConnectionCore;
+import lombok.Data;
 
-import lombok.extern.slf4j.Slf4j;
+@Data
+public class CopyConfigQO {
 
-@Slf4j
-public class NacosConnectionCore implements ConnectionCore {
+    private MetadataType sourceType;
+
+    private Long sourceId;
+
+    private MetadataType targetType;
+
+    private Long targetId;
 
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
index adcb679..924b650 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
@@ -19,6 +19,7 @@
 package org.apache.eventmesh.dashboard.console.model.deploy.create;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -32,6 +33,8 @@ public class CreateClusterByDeployScriptDO extends 
CreateRuntimeByDeployScriptDO
 
     private Long configGatherId;
 
+    private MetadataType configGatherType;
+
     private ClusterType clusterType;
 
     private String version;
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java
index f2cb553..91fbf7a 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterRelationshipService.java
@@ -32,6 +32,8 @@ public interface ClusterRelationshipService {
 
     List<ClusterRelationshipEntity> 
queryListByClusterIdAndType(QueryListByClusterIdAndTypeDO data);
 
+    List<ClusterRelationshipEntity> 
queryListByRelationshipList(QueryListByClusterIdAndTypeDO data);
+
     List<ClusterRelationshipEntity> 
queryListByClusterIdListAndType(QueryListByClusterIdAndTypeDO data);
 
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java
index 7133239..464c89c 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/ClusterService.java
@@ -22,7 +22,7 @@ import 
org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import 
org.apache.eventmesh.dashboard.console.entity.cluster.ClusterRelationshipEntity;
 import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import org.apache.eventmesh.dashboard.console.model.ClusterIdDTO;
-import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndType;
+import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndTypeQO;
 import 
org.apache.eventmesh.dashboard.console.model.vo.cluster.GetClusterBaseMessageVO;
 
 import org.apache.commons.lang3.tuple.Pair;
@@ -49,7 +49,7 @@ public interface ClusterService {
     List<ClusterEntity> queryRelationClusterByClusterIdAndType(ClusterEntity 
clusterEntity);
 
     List<ClusterEntity> queryRelationClusterByClusterIdListAndType(
-        QueryRelationClusterByClusterIdListAndType 
queryRelationClusterByClusterIdListAndType);
+        QueryRelationClusterByClusterIdListAndTypeQO 
queryRelationClusterByClusterIdListAndType);
 
     List<ClusterEntity> queryStorageClusterByEventMeshId(ClusterEntity 
clusterEntity);
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java
index be2447a..5498b2c 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterRelationshipServiceImpl.java
@@ -40,6 +40,11 @@ public class ClusterRelationshipServiceImpl implements 
ClusterRelationshipServic
         return 
this.clusterRelationshipMapper.queryListByClusterIdAndType(data);
     }
 
+    @Override
+    public List<ClusterRelationshipEntity> 
queryListByRelationshipList(QueryListByClusterIdAndTypeDO data) {
+        return 
this.clusterRelationshipMapper.queryListByRelationshipList(data);
+    }
+
     @Override
     public List<ClusterRelationshipEntity> 
queryListByClusterIdListAndType(QueryListByClusterIdAndTypeDO data) {
         return 
this.clusterRelationshipMapper.queryListByClusterIdListAndType(data);
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java
index 8fc3630..77d2580 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/cluster/impl/ClusterServiceImpl.java
@@ -31,7 +31,7 @@ import 
org.apache.eventmesh.dashboard.console.mapper.cluster.RuntimeMapper;
 import org.apache.eventmesh.dashboard.console.mapper.message.GroupMapper;
 import org.apache.eventmesh.dashboard.console.mapper.message.TopicMapper;
 import org.apache.eventmesh.dashboard.console.model.ClusterIdDTO;
-import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndType;
+import 
org.apache.eventmesh.dashboard.console.model.QO.cluster.QueryRelationClusterByClusterIdListAndTypeQO;
 import org.apache.eventmesh.dashboard.console.model.function.OverviewDTO;
 import 
org.apache.eventmesh.dashboard.console.model.vo.cluster.GetClusterBaseMessageVO;
 import org.apache.eventmesh.dashboard.console.service.OverviewService;
@@ -100,7 +100,7 @@ public class ClusterServiceImpl implements ClusterService, 
OverviewService {
 
     @Override
     public List<ClusterEntity> queryRelationClusterByClusterIdListAndType(
-        QueryRelationClusterByClusterIdListAndType 
queryRelationClusterByClusterIdListAndType) {
+        QueryRelationClusterByClusterIdListAndTypeQO 
queryRelationClusterByClusterIdListAndType) {
         return 
this.clusterMapper.queryRelationClusterByClusterIdListAndType(queryRelationClusterByClusterIdListAndType);
     }
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/deploy/impl/PortServiceImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/deploy/impl/PortServiceImpl.java
index e259068..99467c1 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/deploy/impl/PortServiceImpl.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/deploy/impl/PortServiceImpl.java
@@ -20,7 +20,9 @@ package 
org.apache.eventmesh.dashboard.console.service.deploy.impl;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 import org.apache.eventmesh.dashboard.console.entity.cases.PortEntity;
+import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
 import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
+import org.apache.eventmesh.dashboard.console.mapper.cluster.RuntimeMapper;
 import org.apache.eventmesh.dashboard.console.mapper.deploy.PortMapper;
 import org.apache.eventmesh.dashboard.console.mapper.function.ConfigMapper;
 import org.apache.eventmesh.dashboard.console.model.deploy.GetPortsDO;
@@ -50,6 +52,9 @@ public class PortServiceImpl implements PortService {
     @Autowired
     private ConfigMapper configMapper;
 
+    @Autowired
+    private RuntimeMapper runtimeMapper;
+
     @Override
     public List<String> getPorts(GetPortsDO getPortsDO) {
         // 节点从哪里开始
@@ -65,7 +70,7 @@ public class PortServiceImpl implements PortService {
         return ports;
     }
 
-    public Map<String, Integer> applyPorts(ClusterType clusterType, Long 
kubernetesId) {
+    public Map<String, Integer> applyPorts(RuntimeEntity runtimeEntity, 
ClusterType clusterType, Long kubernetesId) {
         ClusterPort clusterPort = ClusterPort.valueOf(clusterType.name());
         int count = clusterPort.getPortMetadataList().size();
         PortEntity portEntity = new PortEntity();
@@ -83,7 +88,11 @@ public class PortServiceImpl implements PortService {
             configEntity.setConfigValue(port + "");
             configEntityList.add(configEntity);
 
+            if (Objects.equals(clusterPort.getClientMetadata(), portMetadata)) 
{
+                runtimeEntity.setPort(port);
+            }
         }
+        // TODO 有地址服务之后,这段代码是否需要
         if (Objects.equals(ClusterType.STORAGE_KAFKA_BROKER, clusterType)) {
             List<ConfigEntity> queryData = 
this.configMapper.queryByRuntimeIdAndConfigName(configEntityList);
             queryData.forEach(configEntity -> {
@@ -93,6 +102,7 @@ public class PortServiceImpl implements PortService {
             });
         }
         this.configMapper.updateValueByConfigList(configEntityList);
+        this.runtimeMapper.updatePortByRuntimeId(runtimeEntity);
         return portMap;
     }
 
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigService.java
index 377543e..645c8d5 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigService.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigService.java
@@ -22,6 +22,7 @@ package 
org.apache.eventmesh.dashboard.console.service.function;
 import org.apache.eventmesh.dashboard.common.enums.MetadataType;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
+import 
org.apache.eventmesh.dashboard.console.model.DO.service.function.config.CopyConfigDO;
 import org.apache.eventmesh.dashboard.console.model.dto.config.ChangeConfigDTO;
 
 import java.util.List;
@@ -41,13 +42,17 @@ public interface ConfigService {
 
     List<ConfigEntity> queryByInstanceId(ConfigEntity configEntity);
 
+
+    @SuppressWarnings("UnusedReturnValue")
+    Integer updateValueByConfigList(List<ConfigEntity> configEntityList);
+
     void updateConfigsByInstanceId(String name, Long clusterId, Integer 
instanceType, Long instanceId, List<ChangeConfigDTO> changeConfigDTOList);
 
     List<ConfigEntity> selectAll();
 
     void batchInsert(List<ConfigEntity> configEntityList);
 
-    void copyConfig(Long sourceId, Long targetId);
+    void copyConfig(CopyConfigDO copyConfigDO);
 
     void restoreConfig(Long sourceId, Long targetId);
 
diff --git 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigTemplateService.java
similarity index 66%
copy from 
eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigTemplateService.java
index 147ad44..25c69fe 100644
--- 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/ConfigTemplateService.java
@@ -15,18 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.console;
+package org.apache.eventmesh.dashboard.console.service.function;
 
-import org.apache.dubbo.common.URL;
+import 
org.apache.eventmesh.dashboard.console.entity.function.ConfigTemplateEntity;
 
-import org.junit.Test;
+import java.util.List;
+
+/**
+ *
+ */
+public interface ConfigTemplateService {
+
+    void insertConfigTemplate(ConfigTemplateEntity configTemplateEntity);
 
-public class Test1 {
 
+    List<ConfigTemplateEntity> 
queryConfigTemplateByClusterType(ConfigTemplateEntity configTemplateEntity);
 
-    @Test
-    public void test() {
-        URL url = URL.valueOf("127.0.0.1");
-        System.out.println(url);
-    }
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigServiceImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigServiceImpl.java
index 7b1b4b6..731c8a9 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigServiceImpl.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigServiceImpl.java
@@ -23,6 +23,8 @@ import 
org.apache.eventmesh.dashboard.console.annotation.EmLog;
 import org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
 import org.apache.eventmesh.dashboard.console.mapper.function.ConfigMapper;
+import 
org.apache.eventmesh.dashboard.console.model.DO.service.function.config.CopyConfigDO;
+import 
org.apache.eventmesh.dashboard.console.model.QO.function.config.CopyConfigQO;
 import org.apache.eventmesh.dashboard.console.model.dto.config.ChangeConfigDTO;
 import 
org.apache.eventmesh.dashboard.console.model.dto.config.UpdateConfigsLog;
 import org.apache.eventmesh.dashboard.console.service.function.ConfigService;
@@ -112,6 +114,11 @@ public class ConfigServiceImpl implements ConfigService {
         });
     }
 
+    @Override
+    public Integer updateValueByConfigList(List<ConfigEntity> 
configEntityList) {
+        return this.configMapper.updateValueByConfigList(configEntityList);
+    }
+
     @Override
     public void updateConfigsByInstanceId(String name, Long clusterId, Integer 
instanceType, Long instanceId,
         List<ChangeConfigDTO> changeConfigDTOList) {
@@ -150,8 +157,9 @@ public class ConfigServiceImpl implements ConfigService {
     }
 
     @Override
-    public void copyConfig(Long sourceId, Long targetId) {
-        configMapper.copyConfig(sourceId, targetId);
+    public void copyConfig(CopyConfigDO copyConfigDO) {
+        CopyConfigQO data = null;
+        configMapper.copyConfig(data);
     }
 
     @Override
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigTemplateServiceImpl.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigTemplateServiceImpl.java
new file mode 100644
index 0000000..41074a6
--- /dev/null
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/service/function/Impl/ConfigTemplateServiceImpl.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ *
+ *     http://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.eventmesh.dashboard.console.service.function.Impl;
+
+import 
org.apache.eventmesh.dashboard.console.entity.function.ConfigTemplateEntity;
+import 
org.apache.eventmesh.dashboard.console.mapper.function.ConfigTemplateMapper;
+import 
org.apache.eventmesh.dashboard.console.service.function.ConfigTemplateService;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Transactional
+public class ConfigTemplateServiceImpl implements ConfigTemplateService {
+
+    @Autowired
+    private ConfigTemplateMapper configTemplateMapper;
+
+
+    @Override
+    public void insertConfigTemplate(ConfigTemplateEntity 
configTemplateEntity) {
+        this.configTemplateMapper.insertConfigTemplate(configTemplateEntity);
+    }
+
+    @Override
+    public List<ConfigTemplateEntity> 
queryConfigTemplateByClusterType(ConfigTemplateEntity configTemplateEntity) {
+        return 
this.configTemplateMapper.queryConfigTemplateByClusterType(configTemplateEntity);
+    }
+}
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManage.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManage.java
index a2d76a0..32508d2 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManage.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/FunctionManage.java
@@ -30,6 +30,7 @@ import 
org.apache.eventmesh.dashboard.console.service.cluster.ClusterRelationshi
 import org.apache.eventmesh.dashboard.console.service.cluster.ClusterService;
 import org.apache.eventmesh.dashboard.console.service.cluster.RuntimeService;
 import 
org.apache.eventmesh.dashboard.console.service.function.HealthDataService;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressManage;
 import 
org.apache.eventmesh.dashboard.console.spring.support.metadata.DatabaseAndMetadataType;
 import 
org.apache.eventmesh.dashboard.console.spring.support.metadata.DefaultMetadataSyncResultHandler;
 import org.apache.eventmesh.dashboard.core.metadata.DataMetadataHandler;
@@ -98,6 +99,11 @@ public class FunctionManage {
         return reportHandlerManage;
     }
 
+    @Bean
+    public AddressManage buildAddressManage() {
+        return new AddressManage();
+    }
+
     @PostConstruct
     private void init() {
         if (!this.enabled) {
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AbstractAddressService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AbstractAddressService.java
new file mode 100644
index 0000000..6026f07
--- /dev/null
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AbstractAddressService.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
+ *
+ *     http://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.eventmesh.dashboard.console.spring.support.address;
+
+import org.apache.eventmesh.dashboard.common.enums.DeployStatusType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
+
+import java.util.List;
+import java.util.Objects;
+
+public abstract class AbstractAddressService implements AddressService {
+
+    protected AddressServiceResult 
createAddressServiceResult(List<RuntimeEntity> runtimeEntityList, boolean 
isCheck) {
+        AddressServiceResult addressServiceResult = 
this.createAddressServiceResult();
+        boolean check = this.isRuntimeStartOrChecking(runtimeEntityList, 
isCheck);
+        addressServiceResult.setCheckSuccess(check);
+        return addressServiceResult;
+    }
+
+    protected AddressServiceResult createAddressServiceResult() {
+        return new AddressServiceResult();
+    }
+
+    protected boolean isRuntimeStartOrChecking(List<RuntimeEntity> 
runtimeEntityList, boolean isCheck) {
+
+        for (RuntimeEntity runtimeEntity : runtimeEntityList) {
+            DeployStatusType deployStatusType = 
runtimeEntity.getDeployStatusType();
+            if (isCheck) {
+                if (!Objects.equals(deployStatusType, 
DeployStatusType.CREATE_SUCCESS)
+                    && !Objects.equals(deployStatusType, 
DeployStatusType.CHECKING)) {
+                    return false;
+                }
+            } else {
+                if (!Objects.equals(deployStatusType, 
DeployStatusType.CREATE_SUCCESS)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+
+    }
+
+}
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressManage.java
similarity index 56%
copy from 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressManage.java
index adcb679..7c0d174 100644
--- 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/model/deploy/create/CreateClusterByDeployScriptDO.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressManage.java
@@ -15,39 +15,29 @@
  * limitations under the License.
  */
 
-
-package org.apache.eventmesh.dashboard.console.model.deploy.create;
+package org.apache.eventmesh.dashboard.console.spring.support.address;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CreateClusterByDeployScriptDO extends 
CreateRuntimeByDeployScriptDO {
-
-
-    private String name;
-
-    private Long configGatherId;
-
-    private ClusterType clusterType;
-
-    private String version;
-
-    private String jmxProperties;
-
-    private String description;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
-    private Integer authType;
+public class AddressManage {
 
-    private Integer runState;
+    private Map<ClusterType, AddressService> addressServiceMap = new 
ConcurrentHashMap<>();
 
-    private Long k8sClusterId;
+    {
+        this.register(new RocketMQBrokerAddressService());
+    }
 
-    private Long deployScriptId;
 
-    private Long resourcesConfigId;
+    private void register(AddressService addressService) {
+        addressService.clusterType().forEach(clusterType -> {
+            this.addressServiceMap.put(clusterType, addressService);
+        });
+    }
 
+    public AddressService getAddressService(ClusterType clusterType) {
+        return this.addressServiceMap.get(clusterType);
+    }
 }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressService.java
similarity index 57%
copy from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressService.java
index fa38abd..6f08d64 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressService.java
@@ -15,34 +15,40 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.core.function.multinetwork;
+package org.apache.eventmesh.dashboard.console.spring.support.address;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 
-import lombok.Data;
+import java.util.List;
 
 /**
- *  申请端口必须连续,这点需要 组件支持端口的配置
+ *
  */
-@Data
-public class PortMetadata {
-
-    private ClusterType clusterType;
+public interface AddressService {
 
-    private String configName;
 
-    private String protocol = "TCP";
+    List<ClusterType> clusterType();
 
-    private String effect = "client";
+    /**
+     * 获得 client 地址
+     */
+    AddressServiceResult createClientAddress(AddressServiceIPDO data);
 
-    private Integer port;
 
-    private boolean required = true;
+    /**
+     * cap 架构 获得
+     */
+    AddressServiceResult createCapAddress(AddressServiceIPDO data);
 
-    private boolean virtual = false;
+    /**
+     * 获得 集群 的 注册中心地址
+     */
+    AddressServiceResult createRegisterAddress(AddressServiceIPDO data);
 
-    private boolean nullPort  = false;
+    /**
+     * 依赖其他 大集群 地址
+     */
+    AddressServiceResult createDependAddress(AddressServiceIPDO data);
 
-    private String explanation;
 
 }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceIPDO.java
similarity index 50%
copy from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceIPDO.java
index fa38abd..ed5709b 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceIPDO.java
@@ -15,34 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.core.function.multinetwork;
+package org.apache.eventmesh.dashboard.console.spring.support.address;
 
 import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import lombok.Data;
 
-/**
- *  申请端口必须连续,这点需要 组件支持端口的配置
- */
 @Data
-public class PortMetadata {
-
-    private ClusterType clusterType;
-
-    private String configName;
-
-    private String protocol = "TCP";
-
-    private String effect = "client";
-
-    private Integer port;
+public class AddressServiceIPDO {
 
-    private boolean required = true;
 
-    private boolean virtual = false;
+    private List<RuntimeEntity> runtimeEntityList;
 
-    private boolean nullPort  = false;
+    private Map<ClusterType, List<RuntimeEntity>> clusterTypeMapMap;
 
-    private String explanation;
+    public Map<Long, List<RuntimeEntity>> 
getRuntimeEntityByClusterType(ClusterType clusterType) {
+        List<RuntimeEntity> list = this.clusterTypeMapMap.get(clusterType);
+        if (Objects.isNull(list)) {
+            return null;
+        }
+        return 
list.stream().collect(Collectors.groupingBy(RuntimeEntity::getClusterId));
+    }
 
-}
+    public List<RuntimeEntity> getRuntimeEntityList(ClusterType clusterType) {
+        return this.clusterTypeMapMap.get(clusterType);
+    }
+}
\ No newline at end of file
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceResult.java
similarity index 59%
copy from 
eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
copy to 
eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceResult.java
index fa38abd..92cdaf4 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/AddressServiceResult.java
@@ -15,34 +15,32 @@
  * limitations under the License.
  */
 
-package org.apache.eventmesh.dashboard.core.function.multinetwork;
+package org.apache.eventmesh.dashboard.console.spring.support.address;
 
-import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 import lombok.Data;
 
-/**
- *  申请端口必须连续,这点需要 组件支持端口的配置
- */
 @Data
-public class PortMetadata {
-
-    private ClusterType clusterType;
-
-    private String configName;
+public class AddressServiceResult {
 
-    private String protocol = "TCP";
+    private boolean checkSuccess = false;
 
-    private String effect = "client";
 
-    private Integer port;
+    private List<ConfigEntity> configEntities;
 
-    private boolean required = true;
 
-    private boolean virtual = false;
 
-    private boolean nullPort  = false;
+    public void addConfigEntity(ConfigEntity configEntity) {
+        if (Objects.isNull(configEntities)) {
+            this.configEntities = new ArrayList<>();
+        }
+        this.configEntities.add(configEntity);
+    }
 
-    private String explanation;
 
 }
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/RocketMQBrokerAddressService.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/RocketMQBrokerAddressService.java
new file mode 100644
index 0000000..ef43a94
--- /dev/null
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/spring/support/address/RocketMQBrokerAddressService.java
@@ -0,0 +1,88 @@
+/*
+ * 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
+ *
+ *     http://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.eventmesh.dashboard.console.spring.support.address;
+
+import org.apache.eventmesh.dashboard.common.enums.ClusterType;
+import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
+import org.apache.eventmesh.dashboard.console.entity.function.ConfigEntity;
+
+import java.util.List;
+import java.util.Map;
+
+public class RocketMQBrokerAddressService extends AbstractAddressService {
+
+
+    @Override
+    public List<ClusterType> clusterType() {
+        return List.of(
+            ClusterType.STORAGE_ROCKETMQ_CLUSTER,
+            ClusterType.STORAGE_ROCKETMQ_BROKER,
+            ClusterType.STORAGE_ROCKETMQ_BROKER_MAIN_SLAVE,
+            ClusterType.STORAGE_ROCKETMQ_BROKER_RAFT);
+    }
+
+    @Override
+    public AddressServiceResult createClientAddress(AddressServiceIPDO data) {
+        // TODO 挂上域名
+        Map<Long, List<RuntimeEntity>> runtimeEntityByClusterType = 
data.getRuntimeEntityByClusterType(ClusterType.STORAGE_ROCKETMQ_NAMESERVER);
+        StringBuilder hostAddress = new StringBuilder();
+        StringBuilder podAddress = new StringBuilder();
+        runtimeEntityByClusterType.forEach((key, value) -> {
+            value.forEach(runtimeEntity -> {
+                
hostAddress.append(runtimeEntity.getHost()).append(":").append(runtimeEntity.getPort()).append(';');
+                
podAddress.append(runtimeEntity.getPodHost()).append(":").append(runtimeEntity.getPort()).append(';');
+            });
+        });
+        AddressServiceResult addressServiceResult = 
this.createAddressServiceResult();
+        addressServiceResult.setCheckSuccess(true);
+
+        ConfigEntity configEntity = new ConfigEntity();
+        configEntity.setConfigName("namesrvAddr");
+        configEntity.setDescription("用户调用地址:");
+        configEntity.setConfigValue(hostAddress.toString());
+
+        addressServiceResult.addConfigEntity(configEntity);
+
+        configEntity = new ConfigEntity();
+        configEntity.setDescription("内部地址:");
+        configEntity.setConfigValue(podAddress.toString());
+        addressServiceResult.addConfigEntity(configEntity);
+
+        return addressServiceResult;
+    }
+
+    @Override
+    public AddressServiceResult createCapAddress(AddressServiceIPDO data) {
+        return null;
+    }
+
+    @Override
+    public AddressServiceResult createRegisterAddress(AddressServiceIPDO data) 
{
+        List<RuntimeEntity> runtimeEntityList = 
data.getRuntimeEntityList(ClusterType.STORAGE_ROCKETMQ_NAMESERVER);
+        AddressServiceResult addressServiceResult = 
this.createAddressServiceResult(runtimeEntityList, false);
+        if (!addressServiceResult.isCheckSuccess()) {
+            return addressServiceResult;
+        }
+        return this.createClientAddress(data);
+    }
+
+    @Override
+    public AddressServiceResult createDependAddress(AddressServiceIPDO data) {
+        return null;
+    }
+}
diff --git 
a/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/utils/data/controller/agent/AgentActionControllerUtils.java
 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/utils/data/controller/agent/AgentActionControllerUtils.java
new file mode 100644
index 0000000..01d9f76
--- /dev/null
+++ 
b/eventmesh-dashboard-console/src/main/java/org/apache/eventmesh/dashboard/console/utils/data/controller/agent/AgentActionControllerUtils.java
@@ -0,0 +1,43 @@
+/*
+ * 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
+ *
+ *     http://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.eventmesh.dashboard.console.utils.data.controller.agent;
+
+import org.apache.eventmesh.dashboard.console.entity.cluster.RuntimeEntity;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeOfRelationshipDO;
+import 
org.apache.eventmesh.dashboard.console.spring.support.address.AddressServiceIPDO;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class AgentActionControllerUtils {
+
+
+    public static AddressServiceIPDO byRuntimeList(List<RuntimeEntity> 
runtimeEntities) {
+        AddressServiceIPDO addressServiceData = new AddressServiceIPDO();
+        addressServiceData.setRuntimeEntityList(runtimeEntities);
+        return addressServiceData;
+    }
+
+    public static AddressServiceIPDO 
byClusterAndRuntimeOfRelationshipDO(ClusterAndRuntimeOfRelationshipDO data) {
+        AddressServiceIPDO addressServiceData = new AddressServiceIPDO();
+        
addressServiceData.setClusterTypeMapMap(data.getRuntimeEntityList().stream().collect(Collectors.groupingBy(RuntimeEntity::getClusterType)));
+        return addressServiceData;
+    }
+
+}
+
diff --git 
a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql 
b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
index 2a3fa13..f2be0f1 100644
--- a/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
+++ b/eventmesh-dashboard-console/src/main/resources/eventmesh-dashboard.sql
@@ -132,7 +132,7 @@ create table config
 (
     id                 bigint unsigned auto_increment primary key,
     organization_id    bigint unsigned not null comment '组织id',
-    cluster_id         bigint          not null comment '集群id',
+    cluster_id         bigint          not null comment '集群id,差点删了',
     cluster_type       varchar(32)     not null comment '',
     instance_type      varchar(31)     not null comment '实例类型 
0:runtime,1:storage,2:connector,3:topic',
     instance_id        bigint          not null default -1 comment 
'实例id,上面配置对应的(比如runtime)的id,如果是-1,是cluster的配置',
diff --git 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
 
b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
index 147ad44..115d834 100644
--- 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
+++ 
b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/Test1.java
@@ -17,7 +17,7 @@
 
 package org.apache.eventmesh.dashboard.console;
 
-import org.apache.dubbo.common.URL;
+import org.apache.eventmesh.dashboard.common.enums.ClusterType;
 
 import org.junit.Test;
 
@@ -26,7 +26,12 @@ public class Test1 {
 
     @Test
     public void test() {
-        URL url = URL.valueOf("127.0.0.1");
-        System.out.println(url);
+
+        
System.out.println(ClusterType.STORAGE_ROCKETMQ_BROKER.getFrameworkInAllRuntimeCluster());
+
+        
System.out.println(ClusterType.STORAGE_ROCKETMQ_CLUSTER.getFrameworkInAllRuntimeCluster());
+
+        
System.out.println(ClusterType.STORAGE_ROCKETMQ_BROKER.getThisInAllRuntimeCluster());
     }
+
 }
diff --git 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomainImplTest.java
 
b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomainImplTest.java
index e3e49c4..cf6955e 100644
--- 
a/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomainImplTest.java
+++ 
b/eventmesh-dashboard-console/src/test/java/org/apache/eventmesh/dashboard/console/domain/ClusterAndRuntimeDomainImplTest.java
@@ -24,9 +24,12 @@ import 
org.apache.eventmesh.dashboard.console.entity.cluster.ClusterEntity;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.ClusterAndRuntimeOfRelationshipDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.GetClusterInSyncReturnDO;
 import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryClusterTreeDO;
+import 
org.apache.eventmesh.dashboard.console.model.DO.domain.clusterAndRuntimeDomain.QueryTreeByChildClusterIdDO;
 import org.apache.eventmesh.dashboard.console.model.vo.cluster.ClusterTreeVO;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -77,4 +80,19 @@ public class ClusterAndRuntimeDomainImplTest {
         System.out.println(result);
     }
 
+
+    @Test
+    public void test_queryTreeByChildClusterId(){
+        QueryTreeByChildClusterIdDO queryTreeByChildClusterIdDO = new 
QueryTreeByChildClusterIdDO();
+        ClusterEntity clusterEntity = new ClusterEntity();
+        clusterEntity.setId(24L);
+        queryTreeByChildClusterIdDO.setClusterEntity(clusterEntity);
+        ClusterType clusterType = ClusterType.STORAGE_JVM_BROKER;
+        
queryTreeByChildClusterIdDO.setRootClusterTypeList(Set.of(clusterType.getHigher()));
+        queryTreeByChildClusterIdDO.setOnlyClusterTypeList(new 
HashSet<>(clusterType.getFrameworkInAllMetaCluster()));
+
+        ClusterAndRuntimeOfRelationshipDO data = 
this.clusterAndRuntimeDomain.queryTreeByChildClusterId(queryTreeByChildClusterIdDO);
+        System.out.println(data);
+    }
+
 }
diff --git a/eventmesh-dashboard-core/pom.xml b/eventmesh-dashboard-core/pom.xml
index ae64834..92a707f 100644
--- a/eventmesh-dashboard-core/pom.xml
+++ b/eventmesh-dashboard-core/pom.xml
@@ -25,7 +25,6 @@
         <artifactId>eventmesh-dashboard</artifactId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
-    <groupId>org.apache.eventmesh.dashboard.core</groupId>
     <artifactId>eventmesh-dashboard-core</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>eventmesh-dashboard-core</name>
@@ -54,12 +53,12 @@
 
         <!-- EventMesh Dashboard modules -->
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.common</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-common</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.service</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-service</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/ClusterPort.java
 
b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/ClusterPort.java
index 0f6f26f..6e098b4 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/ClusterPort.java
+++ 
b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/ClusterPort.java
@@ -56,7 +56,7 @@ public enum ClusterPort {
             portMetadata.setEffect("复制端口");
             STORAGE_ROCKETMQ_BROKER_MAIN_SLAVE.setPortMetadata(portMetadata);
 
-            
STORAGE_ROCKETMQ_BROKER_RAFT.setPortMetadataList(STORAGE_ROCKETMQ_BROKER_MAIN_SLAVE.getPortMetadataList());
+            
STORAGE_ROCKETMQ_BROKER_RAFT.setClusterPort(STORAGE_ROCKETMQ_BROKER_MAIN_SLAVE);
 
             portMetadata = new PortMetadata();
             portMetadata.setConfigName("");
@@ -65,19 +65,36 @@ public enum ClusterPort {
 
     }
 
+
     private List<PortMetadata> portMetadataList = new ArrayList<>();
 
+    private PortMetadata clientMetadata;
+
 
     private ClusterType clusterType;
 
-    void setPortMetadataList(List<PortMetadata> portMetadataList) {
-        this.portMetadataList = portMetadataList;
+
+    void setClusterPort(ClusterPort clusterPort) {
+        if (Objects.isNull(clusterType)) {
+            this.clusterType = ClusterType.valueOf(this.name());
+        }
+        this.clientMetadata = clusterPort.getClientMetadata();
+        this.portMetadataList = clusterPort.getPortMetadataList();
     }
 
     void setPortMetadata(PortMetadata portMetadata) {
         if (Objects.isNull(clusterType)) {
             this.clusterType = ClusterType.valueOf(this.name());
         }
+        if (!portMetadata.isVirtual()
+            && !portMetadata.isNullPort()
+            && Objects.equals(portMetadata.getEffect(), "client")
+        ) {
+            if (Objects.isNull(this.clientMetadata)) {
+                String exceptionString = String.format(" current is %s , now 
is %s", this.clientMetadata, portMetadata);
+                throw new RuntimeException(exceptionString);
+            }
+        }
         portMetadata.setClusterType(this.clusterType);
         this.portMetadataList.add(portMetadata);
     }
diff --git 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
 
b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
index fa38abd..837ba2f 100644
--- 
a/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
+++ 
b/eventmesh-dashboard-core/src/main/java/org/apache/eventmesh/dashboard/core/function/multinetwork/PortMetadata.java
@@ -22,7 +22,12 @@ import 
org.apache.eventmesh.dashboard.common.enums.ClusterType;
 import lombok.Data;
 
 /**
+ * TODO
  *  申请端口必须连续,这点需要 组件支持端口的配置
+ *  集群在 kubernetes 内同步接口
+ *  Runtime 默认端口是 client 端口
+ *  只有对外端口要映射,其他端口都要默认
+ *
  */
 @Data
 public class PortMetadata {
diff --git a/eventmesh-dashboard-dist/README.md 
b/eventmesh-dashboard-dist/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/eventmesh-dashboard-dist/ReleaseKnowStreaming.xml 
b/eventmesh-dashboard-dist/ReleaseKnowStreaming.xml
new file mode 100755
index 0000000..bc691ce
--- /dev/null
+++ b/eventmesh-dashboard-dist/ReleaseKnowStreaming.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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
+  ~
+  ~     http://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.
+  -->
+<?xml version="1.0" encoding="UTF-8"?>
+
+<assembly>
+    <id>${project.version}</id>
+    <includeBaseDirectory>true</includeBaseDirectory>
+    <formats>
+        <format>dir</format>
+        <format>tar.gz</format>
+        <format>zip</format>
+    </formats>
+    <dependencySets>
+        <dependencySet>
+            <outputDirectory>/lib</outputDirectory>
+            <scope>runtime</scope>
+            <includes>
+                <include>*:*</include>
+            </includes>
+            <excludes>
+                
<exclude>org.apache.eventmesh.dashboard:eventmesh-dashboard-console</exclude>
+                
<exclude>org.apache.eventmesh.dashboard:eventmesh-dashboard-core</exclude>
+                
<exclude>org.apache.eventmesh.dashboard:eventmesh-dashboard-common</exclude>
+                
<exclude>org.apache.eventmesh.dashboard:eventmesh-dashboard-service</exclude>
+                
<exclude>org.apache.eventmesh.dashboard:eventmesh-dashboard-observe</exclude>
+            </excludes>
+        </dependencySet>
+        <dependencySet>
+            <outputDirectory>/apps</outputDirectory>
+            <scope>runtime</scope>
+            <includes>
+                
<include>org.apache.eventmesh.dashboard:eventmesh-dashboard-console</include>
+                
<include>org.apache.eventmesh.dashboard:eventmesh-dashboard-core</include>
+                
<include>org.apache.eventmesh.dashboard:eventmesh-dashboard-common</include>
+                
<include>org.apache.eventmesh.dashboard:eventmesh-dashboard-service</include>
+                
<include>org.apache.eventmesh.dashboard:eventmesh-dashboard-observe</include>
+            </includes>
+        </dependencySet>
+    </dependencySets>
+    <fileSets>
+        <fileSet>
+            
<directory>../eventmesh-dashboard-console/src/main/resources</directory>
+            <outputDirectory>conf</outputDirectory>
+            <includes>
+                <include>application.yml</include>
+                <include>logback-spring.xml</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>./bin</directory>
+            <outputDirectory>bin</outputDirectory>
+            <includes>
+                <include>*</include>
+                <include>*/*</include>
+            </includes>
+            <fileMode>0755</fileMode>
+        </fileSet>
+        <fileSet>
+            
<directory>../eventmesh-dashboard-console/src/main/resources</directory>
+            <outputDirectory>init</outputDirectory>
+            <includes>
+                <include>sql</include>
+                <include>sql/*</include>
+            </includes>
+        </fileSet>
+
+        <fileSet>
+            <includes>
+                <include>docker/*</include>
+                <include>docker/**</include>
+
+                <include>init/*</include>
+                <include>init/*/*</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+
+    <files>
+        <file>
+            <source>README.md</source>
+            <outputDirectory>.</outputDirectory>
+        </file>
+        <file>
+            <source>../LICENSE</source>
+            <outputDirectory>.</outputDirectory>
+        </file>
+    </files>
+</assembly>
diff --git a/docker/Dockerfile b/eventmesh-dashboard-dist/docker/Dockerfile
similarity index 100%
rename from docker/Dockerfile
rename to eventmesh-dashboard-dist/docker/Dockerfile
diff --git a/eventmesh-dashboard-dist/pom.xml b/eventmesh-dashboard-dist/pom.xml
new file mode 100644
index 0000000..defd580
--- /dev/null
+++ b/eventmesh-dashboard-dist/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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
+  ~
+  ~     http://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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.eventmesh.dashboard</groupId>
+        <artifactId>eventmesh-dashboard</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <artifactId>eventmesh-dashboard-dist</artifactId>
+    <name>Archetype - eventmesh-dashboard-dist</name>
+    <url>http://maven.apache.org</url>
+
+    <profiles>
+        <profile>
+            <id>release-package</id>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.eventmesh.dashboard</groupId>
+                    <artifactId>eventmesh-dashboard-console</artifactId>
+                    <version>${project.parent.version}</version>
+                </dependency>
+            </dependencies>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <version>3.7.1</version>
+                        <configuration>
+                            <descriptors>
+                                
<descriptor>ReleaseKnowStreaming.xml</descriptor>
+                            </descriptors>
+                            <tarLongFileMode>posix</tarLongFileMode>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>make-assembly</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+                <finalName>eventmesh-dashboard</finalName>
+            </build>
+        </profile>
+    </profiles>
+</project>
diff --git a/eventmesh-dashboard-observe/pom.xml 
b/eventmesh-dashboard-observe/pom.xml
index 9187910..b4bdb10 100644
--- a/eventmesh-dashboard-observe/pom.xml
+++ b/eventmesh-dashboard-observe/pom.xml
@@ -27,7 +27,6 @@
         <version>0.0.1-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.eventmesh.dashboard.observe</groupId>
     <artifactId>eventmesh-dashboard-observe</artifactId>
 
     <properties>
diff --git a/eventmesh-dashboard-service/pom.xml 
b/eventmesh-dashboard-service/pom.xml
index 39ca74a..cf3d64c 100644
--- a/eventmesh-dashboard-service/pom.xml
+++ b/eventmesh-dashboard-service/pom.xml
@@ -25,7 +25,6 @@
         <artifactId>eventmesh-dashboard</artifactId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>
-    <groupId>org.apache.eventmesh.dashboard.service</groupId>
     <artifactId>eventmesh-dashboard-service</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>eventmesh-dashboard-service</name>
@@ -40,7 +39,7 @@
     <dependencies>
         <!-- EventMesh Dashboard modules -->
         <dependency>
-            <groupId>org.apache.eventmesh.dashboard.common</groupId>
+            <groupId>org.apache.eventmesh.dashboard</groupId>
             <artifactId>eventmesh-dashboard-common</artifactId>
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
diff --git a/pom.xml b/pom.xml
index 4c5598f..86db9c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,6 +88,7 @@
         <module>eventmesh-dashboard-core</module>
         <module>eventmesh-dashboard-observe</module>
         <module>eventmesh-dashboard-agent</module>
+        <module>eventmesh-dashboard-dist</module>
     </modules>
 
     <dependencyManagement>
@@ -222,7 +223,7 @@
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>3.5.3</version>
                     <configuration>
-                        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
+                        <argLine>-Xmx1024m</argLine>
                         <testFailureIgnore>true</testFailureIgnore>
                         <includes>
                             <include>**/*Test*.java</include>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to