[集群]增加TOA相关设置

This commit is contained in:
刘祥超
2020-12-02 14:26:03 +08:00
parent 118624b776
commit 622f5db0b5
7 changed files with 135 additions and 32 deletions

View File

@@ -5,6 +5,7 @@ import (
"errors"
"github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils"
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
_ "github.com/go-sql-driver/mysql"
@@ -531,6 +532,39 @@ func (this *NodeClusterDAO) FindClusterAdminId(clusterId int64) (int64, error) {
FindInt64Col(0)
}
// 查找集群的TOA设置
func (this *NodeClusterDAO) FindClusterTOAConfig(clusterId int64) (*nodeconfigs.TOAConfig, error) {
toa, err := this.Query().
Pk(clusterId).
Result("toa").
FindStringCol("")
if err != nil {
return nil, err
}
if !IsNotNull(toa) {
return nodeconfigs.DefaultTOAConfig(), nil
}
config := &nodeconfigs.TOAConfig{}
err = json.Unmarshal([]byte(toa), config)
if err != nil {
return nil, err
}
return config, nil
}
// 修改集群的TOA设置
func (this *NodeClusterDAO) UpdateClusterTOA(clusterId int64, toaJSON []byte) error {
if clusterId <= 0 {
return errors.New("invalid clusterId")
}
op := NewNodeClusterOperator()
op.Id = clusterId
op.Toa = toaJSON
_, err := this.Save(op)
return err
}
// 生成唯一ID
func (this *NodeClusterDAO) genUniqueId() (string, error) {
for {

View File

@@ -20,6 +20,7 @@ type NodeCluster struct {
DnsName string `field:"dnsName"` // DNS名称
DnsDomainId uint32 `field:"dnsDomainId"` // 域名ID
Dns string `field:"dns"` // DNS配置
Toa string `field:"toa"` // TOA配置
}
type NodeClusterOperator struct {
@@ -41,6 +42,7 @@ type NodeClusterOperator struct {
DnsName interface{} // DNS名称
DnsDomainId interface{} // 域名ID
Dns interface{} // DNS配置
Toa interface{} // TOA配置
}
func NewNodeClusterOperator() *NodeClusterOperator {

View File

@@ -142,15 +142,8 @@ func (this *NodeDAO) UpdateNodeLatestVersion(nodeId int64) error {
// 批量更新节点版本
func (this *NodeDAO) UpdateAllNodesLatestVersionMatch(clusterId int64) error {
nodeIds, err := this.FindAllNodeIdsMatch(clusterId)
if err != nil {
return err
}
if len(nodeIds) == 0 {
return nil
}
_, err = this.Query().
Pk(nodeIds).
_, err := this.Query().
Attr("clusterId", clusterId).
Set("latestVersion", dbs.SQL("latestVersion+1")).
Update()
return err
@@ -507,6 +500,13 @@ func (this *NodeDAO) ComposeNodeConfig(nodeId int64) (*nodeconfigs.NodeConfig, e
config.GlobalConfig = globalConfig
}
// TOA
toaConfig, err := SharedNodeClusterDAO.FindClusterTOAConfig(int64(node.ClusterId))
if err != nil {
return nil, err
}
config.TOA = toaConfig
return config, nil
}
@@ -744,6 +744,14 @@ func (this *NodeDAO) FindNodeActive(nodeId int64) (bool, error) {
return isActive == 1, nil
}
// 查找节点的版本号
func (this *NodeDAO) FindNodeVersion(nodeId int64) (int64, error) {
return this.Query().
Pk(nodeId).
Result("version").
FindInt64Col(0)
}
// 生成唯一ID
func (this *NodeDAO) genUniqueId() (string, error) {
for {

View File

@@ -2,29 +2,35 @@ package models
// 用户
type User struct {
Id uint32 `field:"id"` // ID
Username string `field:"username"` // 用户名
Password string `field:"password"` // 密码
Fullname string `field:"fullname"` // 真实姓名
CreatedAt uint64 `field:"createdAt"` // 创建时间
UpdatedAt uint64 `field:"updatedAt"` // 修改时间
State uint8 `field:"state"` // 状态
Mobile string `field:"mobile"` // 手机号
Remark string `field:"remark"` // 备注
Email string `field:"email"` // 邮箱地址
Id uint32 `field:"id"` // ID
IsOn uint8 `field:"isOn"` // 是否启用
Username string `field:"username"` // 用户名
Password string `field:"password"` // 密码
Fullname string `field:"fullname"` // 真实姓名
Mobile string `field:"mobile"` // 手机号
Tel string `field:"tel"` // 联系电话
Remark string `field:"remark"` // 备注
Email string `field:"email"` // 邮箱地址
AvatarFileId uint64 `field:"avatarFileId"` // 头像文件ID
CreatedAt uint64 `field:"createdAt"` // 创建时间
UpdatedAt uint64 `field:"updatedAt"` // 修改时间
State uint8 `field:"state"` // 状态
}
type UserOperator struct {
Id interface{} // ID
Username interface{} // 用户名
Password interface{} // 密码
Fullname interface{} // 真实姓名
CreatedAt interface{} // 创建时间
UpdatedAt interface{} // 修改时间
State interface{} // 状态
Mobile interface{} // 手机号
Remark interface{} // 备注
Email interface{} // 邮箱地址
Id interface{} // ID
IsOn interface{} // 是否启
Username interface{} // 用户名
Password interface{} // 密码
Fullname interface{} // 真实姓名
Mobile interface{} // 手机号
Tel interface{} // 联系电话
Remark interface{} // 备注
Email interface{} // 邮箱地址
AvatarFileId interface{} // 头像文件ID
CreatedAt interface{} // 创建时间
UpdatedAt interface{} // 修改时间
State interface{} // 状态
}
func NewUserOperator() *UserOperator {

View File

@@ -10,7 +10,7 @@ func JSONBytes(data []byte) []byte {
return data
}
// 判断JSON是否为空
// 判断JSON是否为空
func IsNotNull(data string) bool {
return len(data) > 0 && data != "null"
}

View File

@@ -466,6 +466,16 @@ func (this *NodeService) FindCurrentNodeConfig(ctx context.Context, req *pb.Find
if err != nil {
return nil, err
}
// 检查版本号
currentVersion, err := models.SharedNodeDAO.FindNodeVersion(nodeId)
if err != nil {
return nil, err
}
if currentVersion == req.Version {
return &pb.FindCurrentNodeConfigResponse{IsChanged: false}, nil
}
nodeConfig, err := models.SharedNodeDAO.ComposeNodeConfig(nodeId)
if err != nil {
return nil, err
@@ -476,7 +486,7 @@ func (this *NodeService) FindCurrentNodeConfig(ctx context.Context, req *pb.Find
return nil, err
}
return &pb.FindCurrentNodeConfigResponse{NodeJSON: data}, nil
return &pb.FindCurrentNodeConfigResponse{IsChanged: true, NodeJSON: data}, nil
}
// 更新节点状态

View File

@@ -267,7 +267,7 @@ func (this *NodeClusterService) FindNodeClusterHealthCheckConfig(ctx context.Con
if err != nil {
return nil, err
}
return &pb.FindNodeClusterHealthCheckConfigResponse{HealthCheckConfig: configJSON}, nil
return &pb.FindNodeClusterHealthCheckConfigResponse{HealthCheckJSON: configJSON}, nil
}
// 修改集群健康检查设置
@@ -529,3 +529,46 @@ func (this *NodeClusterService) CheckNodeClusterDNSChanges(ctx context.Context,
return &pb.CheckNodeClusterDNSChangesResponse{IsChanged: len(changes) > 0}, nil
}
// 查找集群的TOA配置
func (this *NodeClusterService) FindEnabledNodeClusterTOA(ctx context.Context, req *pb.FindEnabledNodeClusterTOARequest) (*pb.FindEnabledNodeClusterTOAResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
// TODO 检查权限
config, err := models.SharedNodeClusterDAO.FindClusterTOAConfig(req.NodeClusterId)
if err != nil {
return nil, err
}
configJSON, err := json.Marshal(config)
if err != nil {
return nil, err
}
return &pb.FindEnabledNodeClusterTOAResponse{ToaJSON: configJSON}, nil
}
// 修改集群的TOA设置
func (this *NodeClusterService) UpdateNodeClusterTOA(ctx context.Context, req *pb.UpdateNodeClusterTOARequest) (*pb.RPCSuccess, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
// TODO 检查权限
err = models.SharedNodeClusterDAO.UpdateClusterTOA(req.NodeClusterId, req.ToaJSON)
if err != nil {
return nil, err
}
// 更新节点版本
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(req.NodeClusterId)
if err != nil {
return nil, err
}
return this.Success()
}