diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index eab5817c..10553892 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -270,11 +270,21 @@ func (this *ServerDAO) CreateServer(tx *dbs.Tx, } // UpdateServerBasic 修改服务基本信息 -func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string, description string, clusterId int64, isOn bool, groupIds []int64) error { +func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string, description string, clusterId int64, keepOldChanges bool, isOn bool, groupIds []int64) error { if serverId <= 0 { return errors.New("serverId should not be smaller than 0") } - op := NewServerOperator() + + // 老的集群ID + oldClusterId, err := this.Query(tx). + Pk(serverId). + Result("clusterId"). + FindInt64Col(0) + if err != nil { + return err + } + + var op = NewServerOperator() op.Id = serverId op.Name = name op.Description = description @@ -291,7 +301,7 @@ func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string op.GroupIds = groupIdsJSON } - err := this.Save(tx, op) + err = this.Save(tx, op) if err != nil { return err } @@ -303,7 +313,25 @@ func (this *ServerDAO) UpdateServerBasic(tx *dbs.Tx, serverId int64, name string } // 因为可能有isOn的原因,所以需要修改 - return this.NotifyDNSUpdate(tx, serverId) + err = this.NotifyDNSUpdate(tx, serverId) + if err != nil { + return err + } + + if clusterId != oldClusterId { + // 服务配置更新 + if !keepOldChanges { + err = this.NotifyClusterUpdate(tx, oldClusterId, serverId) + if err != nil { + return err + } + } + + // DNS更新 + // TODO + } + + return nil } // UpdateUserServerBasic 设置用户相关的基本信息 @@ -2418,7 +2446,7 @@ func (this *ServerDAO) FindServerUAM(tx *dbs.Tx, serverId int64) ([]byte, error) FindJSONCol() } -// NotifyUpdate 同步集群 +// NotifyUpdate 同步服务所在的集群 func (this *ServerDAO) NotifyUpdate(tx *dbs.Tx, serverId int64) error { // 创建任务 clusterId, err := this.FindServerClusterId(tx, serverId) @@ -2431,6 +2459,14 @@ func (this *ServerDAO) NotifyUpdate(tx *dbs.Tx, serverId int64) error { return SharedNodeTaskDAO.CreateClusterTask(tx, nodeconfigs.NodeRoleNode, clusterId, serverId, NodeTaskTypeConfigChanged) } +// NotifyClusterUpdate 同步指定的集群 +func (this *ServerDAO) NotifyClusterUpdate(tx *dbs.Tx, clusterId, serverId int64) error { + if clusterId <= 0 { + return nil + } + return SharedNodeTaskDAO.CreateClusterTask(tx, nodeconfigs.NodeRoleNode, clusterId, serverId, NodeTaskTypeConfigChanged) +} + // NotifyDNSUpdate 通知DNS更新 func (this *ServerDAO) NotifyDNSUpdate(tx *dbs.Tx, serverId int64) error { clusterId, err := this.Query(tx). diff --git a/internal/rpc/services/service_server.go b/internal/rpc/services/service_server.go index d8378c43..08868cb7 100644 --- a/internal/rpc/services/service_server.go +++ b/internal/rpc/services/service_server.go @@ -185,7 +185,7 @@ func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.Update return nil, errors.New("can not find server") } - err = models.SharedServerDAO.UpdateServerBasic(tx, req.ServerId, req.Name, req.Description, req.NodeClusterId, req.IsOn, req.ServerGroupIds) + err = models.SharedServerDAO.UpdateServerBasic(tx, req.ServerId, req.Name, req.Description, req.NodeClusterId, req.KeepOldConfigs, req.IsOn, req.ServerGroupIds) if err != nil { return nil, err } @@ -1965,12 +1965,30 @@ func (this *ServerService) FindServerUserPlan(ctx context.Context, req *pb.FindS // ComposeServerConfig 获取服务配置 func (this *ServerService) ComposeServerConfig(ctx context.Context, req *pb.ComposeServerConfigRequest) (*pb.ComposeServerConfigResponse, error) { - _, err := this.ValidateNode(ctx) + nodeId, err := this.ValidateNode(ctx) if err != nil { return nil, err } var tx = this.NullTx() + + //读取节点的所有集群 + clusterIds, err := models.SharedNodeDAO.FindEnabledNodeClusterIds(tx, nodeId) + if err != nil { + return nil, err + } + + // 读取服务所在集群 + serverClusterId, err := models.SharedServerDAO.FindServerClusterId(tx, req.ServerId) + if err != nil { + return nil, err + } + + // 如果不在当前节点的集群中,则返回nil + if !lists.ContainsInt64(clusterIds, serverClusterId) { + return &pb.ComposeServerConfigResponse{ServerConfigJSON: nil}, nil + } + serverConfig, err := models.SharedServerDAO.ComposeServerConfigWithServerId(tx, req.ServerId, true) if err != nil { if err == models.ErrNotFound {