Unverified Commit a90f34e5 authored by Guang Jiong Lou's avatar Guang Jiong Lou Committed by GitHub
Browse files

expose local cluster (#681)


* expose local cluster
Signed-off-by: default avatarlou <alex1988@outlook.com>

* fix list local ns
Signed-off-by: default avatarlou <alex1988@outlook.com>

* fix local cluster id
Signed-off-by: default avatarlou <alex1988@outlook.com>

* fix local cluster id
Signed-off-by: default avatarlou <alex1988@outlook.com>

* update after review
Signed-off-by: default avatarlou <alex1988@outlook.com>
Showing with 85 additions and 39 deletions
+85 -39
......@@ -140,13 +140,6 @@ const (
Image DistributeType = "image"
)
type K8SClusterStatus string
const (
Disconnected K8SClusterStatus = "disconnected"
Pending K8SClusterStatus = "pending"
)
type NotifyType int
var (
......@@ -210,6 +203,6 @@ const (
)
const (
RoleBindingNameEdit = setting.ProductName+"-edit"
RoleBindingNameView = setting.ProductName+"-view"
RoleBindingNameEdit = setting.ProductName + "-edit"
RoleBindingNameView = setting.ProductName + "-view"
)
......@@ -23,27 +23,27 @@ import (
"go.mongodb.org/mongo-driver/bson/primitive"
"github.com/koderover/zadig/pkg/microservice/aslan/config"
"github.com/koderover/zadig/pkg/setting"
)
var namePattern = regexp.MustCompile(`^[0-9a-zA-Z_.-]{1,32}$`)
type K8SCluster struct {
ID primitive.ObjectID `json:"id,omitempty" bson:"_id,omitempty"`
Name string `json:"name" bson:"name"`
Tags []string `json:"tags" bson:"tags"`
Description string `json:"description" bson:"description"`
Namespace string `json:"namespace" bson:"namespace"`
Info *K8SClusterInfo `json:"info,omitempty" bson:"info,omitempty"`
Status config.K8SClusterStatus `json:"status" bson:"status"`
Error string `json:"error" bson:"error"`
Yaml string `json:"yaml" bson:"yaml"`
Production bool `json:"production" bson:"production"`
CreatedAt int64 `json:"createdAt" bson:"createdAt"`
CreatedBy string `json:"createdBy" bson:"createdBy"`
Disconnected bool `json:"-" bson:"disconnected"`
Token string `json:"token" bson:"-"`
Provider int8 `json:"provider" bson:"provider"`
ID primitive.ObjectID `json:"id,omitempty" bson:"_id,omitempty"`
Name string `json:"name" bson:"name"`
Tags []string `json:"tags" bson:"tags"`
Description string `json:"description" bson:"description"`
Namespace string `json:"namespace" bson:"namespace"`
Info *K8SClusterInfo `json:"info,omitempty" bson:"info,omitempty"`
Status setting.K8SClusterStatus `json:"status" bson:"status"`
Error string `json:"error" bson:"error"`
Yaml string `json:"yaml" bson:"yaml"`
Production bool `json:"production" bson:"production"`
CreatedAt int64 `json:"createdAt" bson:"createdAt"`
CreatedBy string `json:"createdBy" bson:"createdBy"`
Disconnected bool `json:"-" bson:"disconnected"`
Token string `json:"token" bson:"-"`
Provider int8 `json:"provider" bson:"provider"`
}
type K8SClusterInfo struct {
......
......@@ -221,9 +221,9 @@ func (c *K8SClusterColl) UpdateConnectState(id string, disconnected bool) error
newState := bson.M{"disconnected": disconnected}
if disconnected {
newState["status"] = config.Disconnected
newState["status"] = string(setting.Disconnected)
} else {
newState["status"] = config.Pending
newState["status"] = string(setting.Pending)
}
_, err = c.UpdateMany(context.TODO(), bson.M{"_id": oid}, bson.M{"$set": newState})
......
......@@ -31,6 +31,7 @@ import (
"github.com/koderover/zadig/pkg/microservice/aslan/config"
"github.com/koderover/zadig/pkg/microservice/aslan/core/common/repository/models"
"github.com/koderover/zadig/pkg/microservice/aslan/core/common/repository/mongodb"
"github.com/koderover/zadig/pkg/setting"
"github.com/koderover/zadig/pkg/tool/crypto"
e "github.com/koderover/zadig/pkg/tool/errors"
"github.com/koderover/zadig/pkg/tool/kube/multicluster"
......@@ -104,7 +105,7 @@ func (s *Service) CreateCluster(cluster *models.K8SCluster, logger *zap.SugaredL
return nil, e.ErrCreateCluster.AddDesc(e.DuplicateClusterNameFound)
}
cluster.Status = config.Pending
cluster.Status = setting.Pending
err = s.coll.Create(cluster)
......
......@@ -205,6 +205,10 @@ func CreateProduct(c *gin.Context) {
}
args.UpdateBy = ctx.UserName
// don't save the local cluster id to db
if args.ClusterID == setting.LocalClusterID {
args.ClusterID = ""
}
ctx.Err = service.CreateProduct(
ctx.UserName, ctx.RequestID, args, ctx.Logger,
)
......@@ -484,6 +488,10 @@ func ListWorkloads(c *gin.Context) {
return
}
if args.ClusterID == setting.LocalClusterID {
args.ClusterID = ""
}
count, services, err := commonservice.ListWorkloads("", args.ClusterID, args.Namespace, "", args.PerPage, args.Page, ctx.Logger, func(workloads []*commonservice.Workload) []*commonservice.Workload {
workloadStat, _ := mongodb.NewWorkLoadsStatColl().Find(args.ClusterID, args.Namespace)
workloadM := map[string]commonmodels.Workload{}
......
......@@ -54,7 +54,11 @@ func ListAvailableNamespaces(c *gin.Context) {
ctx := internalhandler.NewContext(c)
defer func() { internalhandler.JSONResponse(c, ctx) }()
ctx.Resp, ctx.Err = service.ListAvailableNamespaces(c.Query("clusterId"), ctx.Logger)
clusterID := c.Query("clusterId")
if clusterID == setting.LocalClusterID {
clusterID = ""
}
ctx.Resp, ctx.Err = service.ListAvailableNamespaces(clusterID, ctx.Logger)
}
func ListServicePods(c *gin.Context) {
......
......@@ -20,6 +20,7 @@ import (
"strconv"
"github.com/koderover/zadig/pkg/microservice/aslan/core/common/repository/mongodb"
"github.com/koderover/zadig/pkg/setting"
"github.com/koderover/zadig/pkg/tool/log"
)
......@@ -30,13 +31,20 @@ type resourceSpec struct {
}
func GetBundleResources() ([]*resourceSpec, error) {
var res []*resourceSpec
clusters, err := mongodb.NewK8SClusterColl().List(nil)
if err != nil {
log.Errorf("Failed to list clusters in db, err: %s", err)
return nil, err
}
res := []*resourceSpec{
{
ResourceID: setting.LocalClusterID,
Spec: map[string]interface{}{
"production": "false",
},
},
}
for _, cluster := range clusters {
res = append(res, &resourceSpec{
ResourceID: cluster.ID.Hex(),
......
......@@ -21,34 +21,48 @@ import (
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"k8s.io/apimachinery/pkg/util/sets"
configbase "github.com/koderover/zadig/pkg/config"
"github.com/koderover/zadig/pkg/microservice/aslan/config"
commonmodels "github.com/koderover/zadig/pkg/microservice/aslan/core/common/repository/models"
commonrepo "github.com/koderover/zadig/pkg/microservice/aslan/core/common/repository/mongodb"
"github.com/koderover/zadig/pkg/microservice/aslan/core/common/service/kube"
"github.com/koderover/zadig/pkg/setting"
e "github.com/koderover/zadig/pkg/tool/errors"
)
type K8SCluster struct {
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Status config.K8SClusterStatus `json:"status"`
Production bool `json:"production"`
CreatedAt int64 `json:"createdAt"`
CreatedBy string `json:"createdBy"`
Provider int8 `json:"provider"`
ID string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
Status setting.K8SClusterStatus `json:"status"`
Production bool `json:"production"`
CreatedAt int64 `json:"createdAt"`
CreatedBy string `json:"createdBy"`
Provider int8 `json:"provider"`
}
func ListClusters(ids []string, logger *zap.SugaredLogger) ([]*K8SCluster, error) {
cs, err := commonrepo.NewK8SClusterColl().List(&commonrepo.ClusterListOpts{IDs: ids})
idSet := sets.NewString(ids...)
localClusterIncluded := idSet.Has(setting.LocalClusterID)
idSet = idSet.Delete(setting.LocalClusterID)
cs, err := commonrepo.NewK8SClusterColl().List(&commonrepo.ClusterListOpts{IDs: idSet.UnsortedList()})
if err != nil {
logger.Errorf("Failed to list clusters, err: %s", err)
return nil, err
}
var res []*K8SCluster
if len(ids) == 0 || localClusterIncluded {
res = append(res, &K8SCluster{
ID: setting.LocalClusterID,
Name: setting.LocalClusterName,
Production: false,
Status: setting.Normal,
})
}
for _, c := range cs {
res = append(res, &K8SCluster{
ID: c.ID.Hex(),
......
......@@ -190,6 +190,10 @@ func CreateK8sWorkloads(c *gin.Context) {
ctx.Err = e.ErrInvalidParam.AddDesc("invalid K8sWorkloadsArgs args")
return
}
if args.ClusterID == setting.LocalClusterID {
args.ClusterID = ""
}
ctx.Err = svcservice.CreateK8sWorkLoads(c, ctx.RequestID, ctx.UserName, args.ProductName, args.WorkLoads, args.ClusterID, args.Namespace, args.EnvName, ctx.Logger)
}
......
......@@ -550,3 +550,17 @@ const (
IngressSubresource = "ingress"
ResourcesHeader = "Resources"
)
const (
LocalClusterID = "local" // special(fake) id of the local cluster
LocalClusterName = "local" // special(fake) name of the local cluster
)
type K8SClusterStatus string
const (
Disconnected K8SClusterStatus = "disconnected"
Pending K8SClusterStatus = "pending"
Normal K8SClusterStatus = "normal"
Abnormal K8SClusterStatus = "abnormal"
)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment