feat: admin
diff --git a/pkg/admin/component.go b/pkg/admin/component.go
index 2617e8b..abc9757 100644
--- a/pkg/admin/component.go
+++ b/pkg/admin/component.go
@@ -26,7 +26,7 @@
var adminServerLog = core.Log.WithName("admin")
func Setup(rt core_runtime.Runtime) error {
- adminServer := server.NewAdminServer()
+ adminServer := server.NewAdminServer(*rt.Config().Admin).InitHTTPRouter()
if err := rt.Add(adminServer); err != nil {
adminServerLog.Error(err, "fail to start the admin server")
return err
diff --git a/pkg/admin/model/dubbo.go b/pkg/admin/model/dubbo.go
index a4a9794..24abe29 100644
--- a/pkg/admin/model/dubbo.go
+++ b/pkg/admin/model/dubbo.go
@@ -16,3 +16,15 @@
*/
package model
+
+// Application dubbo 应用
+type Application struct{}
+
+// Workload dubbo 工作负载
+type Workload struct{}
+
+// Instance dubbo 实例
+type Instance struct{}
+
+// Service dubbo 服务
+type Service struct{}
diff --git a/pkg/admin/routing/routes.go b/pkg/admin/routing/routes.go
deleted file mode 100644
index e7a99c1..0000000
--- a/pkg/admin/routing/routes.go
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * 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 routing
diff --git a/pkg/admin/server/server.go b/pkg/admin/server/server.go
index 954e851..a2bd219 100644
--- a/pkg/admin/server/server.go
+++ b/pkg/admin/server/server.go
@@ -17,16 +17,75 @@
package server
-type AdminServer struct{}
+import (
+ "context"
+ "github.com/apache/dubbo-kubernetes/pkg/config/admin"
+ "github.com/apache/dubbo-kubernetes/pkg/core/logger"
+ "github.com/gin-gonic/gin"
+ "net/http"
+ "strconv"
+)
-func NewAdminServer() *AdminServer {
- return &AdminServer{}
+type AdminServer struct {
+ Engine *gin.Engine
+ adminCfg admin.Admin
+}
+
+func NewAdminServer(adminCfg admin.Admin) *AdminServer {
+ return &AdminServer{
+ adminCfg: adminCfg,
+ }
+}
+
+func (a *AdminServer) InitHTTPRouter() *AdminServer {
+ r := gin.Default()
+
+ router := r.Group("/api/v1")
+ router.Group("/")
+
+ a.Engine = r
+ return a
}
func (a *AdminServer) Start(stop <-chan struct{}) error {
+ errChan := make(chan error)
+
+ var httpServer *http.Server
+ httpServer = a.startHttpServer(errChan)
+ select {
+ case <-stop:
+ logger.Sugar().Info("stopping bufman")
+ if httpServer != nil {
+ return httpServer.Shutdown(context.Background())
+ }
+ case err := <-errChan:
+ return err
+ }
return nil
}
+func (a *AdminServer) startHttpServer(errChan chan error) *http.Server {
+ server := &http.Server{
+ Addr: ":" + strconv.Itoa(a.adminCfg.Port),
+ Handler: a.Engine,
+ }
+
+ go func() {
+ err := server.ListenAndServe()
+ if err != nil {
+ switch err {
+ case http.ErrServerClosed:
+ logger.Sugar().Info("shutting down bufman HTTP Server")
+ default:
+ logger.Sugar().Error(err, "could not start bufman HTTP Server")
+ errChan <- err
+ }
+ }
+ }()
+
+ return server
+}
+
func (a *AdminServer) NeedLeaderElection() bool {
return false
}
diff --git a/pkg/core/bootstrap/bootstrap.go b/pkg/core/bootstrap/bootstrap.go
index 6e8ce9c..9ead6a1 100644
--- a/pkg/core/bootstrap/bootstrap.go
+++ b/pkg/core/bootstrap/bootstrap.go
@@ -19,8 +19,10 @@
import (
"context"
+ k8s_extensions "github.com/apache/dubbo-kubernetes/pkg/plugins/extensions/k8s"
"net/http"
"net/url"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
"strings"
"sync"
)
@@ -378,41 +380,64 @@
defaultManager := core_manager.NewResourceManager(builder.ResourceStore())
customizableManager := core_manager.NewCustomizableResourceManager(defaultManager, nil)
+ var (
+ manager kube_ctrl.Manager
+ ok bool
+ )
+ deployMode := builder.GetDeployMode()
+ if deployMode != config_core.UniversalMode {
+ manager, ok = k8s_extensions.FromManagerContext(builder.Extensions())
+ if !ok {
+ return errors.New("get kube manager err")
+ }
+ }
customizableManager.Customize(
mesh.DataplaneType,
dataplane_managers.NewDataplaneManager(
builder.ResourceStore(),
cfg.Multizone.Zone.Name,
+ manager,
+ deployMode,
))
customizableManager.Customize(
mesh.MappingType,
mapping_managers.NewMappingManager(
builder.ResourceStore(),
+ manager,
+ deployMode,
))
customizableManager.Customize(
mesh.MetaDataType,
metadata_managers.NewMetadataManager(
builder.ResourceStore(),
+ manager,
+ deployMode,
))
customizableManager.Customize(
mesh.ConditionRouteType,
condition_route.NewConditionRouteManager(
builder.ResourceStore(),
+ manager,
+ deployMode,
))
customizableManager.Customize(
mesh.TagRouteType,
tag_route.NewTagRouteManager(
builder.ResourceStore(),
+ manager,
+ deployMode,
))
customizableManager.Customize(
mesh.DynamicConfigType,
dynamic_config.NewDynamicConfigManager(
builder.ResourceStore(),
+ manager,
+ deployMode,
))
customizableManager.Customize(
@@ -424,6 +449,8 @@
builder.ResourceValidators().Mesh,
builder.Extensions(),
cfg,
+ manager,
+ deployMode,
),
)
diff --git a/pkg/core/managers/apis/condition_route/condition_route_manager.go b/pkg/core/managers/apis/condition_route/condition_route_manager.go
index a176457..9b13095 100644
--- a/pkg/core/managers/apis/condition_route/condition_route_manager.go
+++ b/pkg/core/managers/apis/condition_route/condition_route_manager.go
@@ -18,18 +18,24 @@
package condition_route
import (
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
core_manager "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
type conditionRouteManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
+ store core_store.ResourceStore
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewConditionRouteManager(store core_store.ResourceStore) core_manager.ResourceManager {
+func NewConditionRouteManager(store core_store.ResourceStore, manager kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &conditionRouteManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
+ manager: manager,
+ deployMode: mode,
}
}
diff --git a/pkg/core/managers/apis/dataplane/dataplane_manager.go b/pkg/core/managers/apis/dataplane/dataplane_manager.go
index 8027dfc..7ec8cba 100644
--- a/pkg/core/managers/apis/dataplane/dataplane_manager.go
+++ b/pkg/core/managers/apis/dataplane/dataplane_manager.go
@@ -19,6 +19,8 @@
import (
"context"
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
import (
@@ -37,15 +39,19 @@
type dataplaneManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
- zone string
+ store core_store.ResourceStore
+ zone string
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewDataplaneManager(store core_store.ResourceStore, zone string) core_manager.ResourceManager {
+func NewDataplaneManager(store core_store.ResourceStore, zone string, manager kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &dataplaneManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
zone: zone,
+ manager: manager,
+ deployMode: mode,
}
}
@@ -72,6 +78,9 @@
}
m.setInboundsClusterTag(dataplane)
m.setHealth(dataplane)
+ if m.deployMode != config_core.UniversalMode {
+ m.setExtensions(dataplane)
+ }
return nil
}
@@ -86,6 +95,9 @@
for _, item := range dataplanes.Items {
m.setHealth(item)
m.setInboundsClusterTag(item)
+ if m.deployMode != config_core.UniversalMode {
+ m.setExtensions(item)
+ }
}
return nil
}
@@ -130,3 +142,5 @@
}
}
}
+
+func (m *dataplaneManager) setExtensions(dp *core_mesh.DataplaneResource) {}
diff --git a/pkg/core/managers/apis/dynamic_config/dynamic_config.go b/pkg/core/managers/apis/dynamic_config/dynamic_config.go
index 9e15efb..2f4e71d 100644
--- a/pkg/core/managers/apis/dynamic_config/dynamic_config.go
+++ b/pkg/core/managers/apis/dynamic_config/dynamic_config.go
@@ -18,18 +18,24 @@
package dynamic_config
import (
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
core_manager "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
type dynamicConfigManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
+ store core_store.ResourceStore
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewDynamicConfigManager(store core_store.ResourceStore) core_manager.ResourceManager {
+func NewDynamicConfigManager(store core_store.ResourceStore, manager kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &dynamicConfigManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
+ manager: manager,
+ deployMode: mode,
}
}
diff --git a/pkg/core/managers/apis/mapping/mapping_manager.go b/pkg/core/managers/apis/mapping/mapping_manager.go
index 83d7df2..96b5d1c 100644
--- a/pkg/core/managers/apis/mapping/mapping_manager.go
+++ b/pkg/core/managers/apis/mapping/mapping_manager.go
@@ -19,6 +19,8 @@
import (
"context"
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
import (
@@ -30,13 +32,17 @@
type mappingManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
+ store core_store.ResourceStore
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewMappingManager(store core_store.ResourceStore) core_manager.ResourceManager {
+func NewMappingManager(store core_store.ResourceStore, manager kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &mappingManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
+ manager: manager,
+ deployMode: mode,
}
}
diff --git a/pkg/core/managers/apis/mesh/mesh_manager.go b/pkg/core/managers/apis/mesh/mesh_manager.go
index 9960dbb..a90c029 100644
--- a/pkg/core/managers/apis/mesh/mesh_manager.go
+++ b/pkg/core/managers/apis/mesh/mesh_manager.go
@@ -19,6 +19,8 @@
import (
"context"
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
"time"
)
@@ -43,6 +45,8 @@
validator MeshValidator,
extensions context.Context,
config dubbo_cp.Config,
+ manager kube_ctrl.Manager,
+ mode config_core.DeployMode,
) core_manager.ResourceManager {
meshManager := &meshManager{
store: store,
@@ -51,6 +55,8 @@
meshValidator: validator,
unsafeDelete: config.Store.UnsafeDelete,
extensions: extensions,
+ manager: manager,
+ deployMode: mode,
}
if config.Store.Type == config_store.KubernetesStore {
meshManager.k8sStore = true
@@ -68,6 +74,8 @@
extensions context.Context
k8sStore bool
systemNamespace string
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
func (m *meshManager) Get(ctx context.Context, resource core_model.Resource, fs ...core_store.GetOptionsFunc) error {
diff --git a/pkg/core/managers/apis/metadata/metadata_manager.go b/pkg/core/managers/apis/metadata/metadata_manager.go
index 8e0a48d..c3df46c 100644
--- a/pkg/core/managers/apis/metadata/metadata_manager.go
+++ b/pkg/core/managers/apis/metadata/metadata_manager.go
@@ -19,6 +19,8 @@
import (
"context"
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
import (
@@ -37,13 +39,17 @@
type metadataManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
+ store core_store.ResourceStore
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewMetadataManager(store core_store.ResourceStore) core_manager.ResourceManager {
+func NewMetadataManager(store core_store.ResourceStore, manage kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &metadataManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
+ deployMode: mode,
+ manager: manage,
}
}
diff --git a/pkg/core/managers/apis/tag_route/tag_route.go b/pkg/core/managers/apis/tag_route/tag_route.go
index 51229d6..b30ed47 100644
--- a/pkg/core/managers/apis/tag_route/tag_route.go
+++ b/pkg/core/managers/apis/tag_route/tag_route.go
@@ -18,18 +18,24 @@
package tag_route
import (
+ config_core "github.com/apache/dubbo-kubernetes/pkg/config/core"
core_manager "github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
core_store "github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
+ kube_ctrl "sigs.k8s.io/controller-runtime"
)
type tagRouteManager struct {
core_manager.ResourceManager
- store core_store.ResourceStore
+ store core_store.ResourceStore
+ manager kube_ctrl.Manager
+ deployMode config_core.DeployMode
}
-func NewTagRouteManager(store core_store.ResourceStore) core_manager.ResourceManager {
+func NewTagRouteManager(store core_store.ResourceStore, manager kube_ctrl.Manager, mode config_core.DeployMode) core_manager.ResourceManager {
return &tagRouteManager{
ResourceManager: core_manager.NewResourceManager(store),
store: store,
+ manager: manager,
+ deployMode: mode,
}
}