diff --git a/internal/db/models/node_ip_address_dao.go b/internal/db/models/node_ip_address_dao.go index bc2fde80..47ea783a 100644 --- a/internal/db/models/node_ip_address_dao.go +++ b/internal/db/models/node_ip_address_dao.go @@ -119,7 +119,7 @@ func (this *NodeIPAddressDAO) FindAddressIsHealthy(tx *dbs.Tx, addressId int64) } // CreateAddress 创建IP地址 -func (this *NodeIPAddressDAO) CreateAddress(tx *dbs.Tx, adminId int64, nodeId int64, role nodeconfigs.NodeRole, name string, ip string, canAccess bool, isUp bool) (addressId int64, err error) { +func (this *NodeIPAddressDAO) CreateAddress(tx *dbs.Tx, adminId int64, nodeId int64, role nodeconfigs.NodeRole, name string, ip string, canAccess bool, isUp bool, groupId int64) (addressId int64, err error) { if len(role) == 0 { role = nodeconfigs.NodeRoleNode } @@ -131,6 +131,7 @@ func (this *NodeIPAddressDAO) CreateAddress(tx *dbs.Tx, adminId int64, nodeId in op.Ip = ip op.CanAccess = canAccess op.IsUp = isUp + op.GroupId = groupId op.State = NodeIPAddressStateEnabled addressId, err = this.SaveInt64(tx, op) diff --git a/internal/db/models/node_ip_address_group_dao.go b/internal/db/models/node_ip_address_group_dao.go new file mode 100644 index 00000000..db7707c8 --- /dev/null +++ b/internal/db/models/node_ip_address_group_dao.go @@ -0,0 +1,44 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + "github.com/iwind/TeaGo/Tea" + "github.com/iwind/TeaGo/dbs" +) + +type NodeIPAddressGroupDAO dbs.DAO + +func NewNodeIPAddressGroupDAO() *NodeIPAddressGroupDAO { + return dbs.NewDAO(&NodeIPAddressGroupDAO{ + DAOObject: dbs.DAOObject{ + DB: Tea.Env, + Table: "edgeNodeIPAddressGroups", + Model: new(NodeIPAddressGroup), + PkName: "id", + }, + }).(*NodeIPAddressGroupDAO) +} + +var SharedNodeIPAddressGroupDAO *NodeIPAddressGroupDAO + +func init() { + dbs.OnReady(func() { + SharedNodeIPAddressGroupDAO = NewNodeIPAddressGroupDAO() + }) +} + +// FindNodeIPAddressGroupName 根据主键查找名称 +func (this *NodeIPAddressGroupDAO) FindNodeIPAddressGroupName(tx *dbs.Tx, id uint32) (string, error) { + return this.Query(tx). + Pk(id). + Result("name"). + FindStringCol("") +} + +// CreateGroup 创建分组 +func (this *NodeIPAddressGroupDAO) CreateGroup(tx *dbs.Tx, name string, value string) (int64, error) { + var op = NewNodeIPAddressGroupOperator() + op.Name = name + op.Value = value + return this.SaveInt64(tx, op) +} diff --git a/internal/db/models/node_ip_address_group_dao_test.go b/internal/db/models/node_ip_address_group_dao_test.go new file mode 100644 index 00000000..224e9db7 --- /dev/null +++ b/internal/db/models/node_ip_address_group_dao_test.go @@ -0,0 +1,6 @@ +package models + +import ( + _ "github.com/go-sql-driver/mysql" + _ "github.com/iwind/TeaGo/bootstrap" +) diff --git a/internal/db/models/node_ip_address_group_model.go b/internal/db/models/node_ip_address_group_model.go new file mode 100644 index 00000000..ee1c4d50 --- /dev/null +++ b/internal/db/models/node_ip_address_group_model.go @@ -0,0 +1,18 @@ +package models + +// NodeIPAddressGroup IP地址分组 +type NodeIPAddressGroup struct { + Id uint32 `field:"id"` // ID + Name string `field:"name"` // 分组名 + Value string `field:"value"` // IP值 +} + +type NodeIPAddressGroupOperator struct { + Id interface{} // ID + Name interface{} // 分组名 + Value interface{} // IP值 +} + +func NewNodeIPAddressGroupOperator() *NodeIPAddressGroupOperator { + return &NodeIPAddressGroupOperator{} +} diff --git a/internal/db/models/node_ip_address_group_model_ext.go b/internal/db/models/node_ip_address_group_model_ext.go new file mode 100644 index 00000000..2640e7f9 --- /dev/null +++ b/internal/db/models/node_ip_address_group_model_ext.go @@ -0,0 +1 @@ +package models diff --git a/internal/db/models/node_ip_address_model.go b/internal/db/models/node_ip_address_model.go index 71339753..c7b464dd 100644 --- a/internal/db/models/node_ip_address_model.go +++ b/internal/db/models/node_ip_address_model.go @@ -5,6 +5,7 @@ type NodeIPAddress struct { Id uint32 `field:"id"` // ID NodeId uint32 `field:"nodeId"` // 节点ID Role string `field:"role"` // 节点角色 + GroupId uint32 `field:"groupId"` // 所属分组ID Name string `field:"name"` // 名称 Ip string `field:"ip"` // IP地址 Description string `field:"description"` // 描述 @@ -26,6 +27,7 @@ type NodeIPAddressOperator struct { Id interface{} // ID NodeId interface{} // 节点ID Role interface{} // 节点角色 + GroupId interface{} // 所属分组ID Name interface{} // 名称 Ip interface{} // IP地址 Description interface{} // 描述 diff --git a/internal/rpc/services/service_node.go b/internal/rpc/services/service_node.go index 68ba9e3f..40df6de8 100644 --- a/internal/rpc/services/service_node.go +++ b/internal/rpc/services/service_node.go @@ -1402,7 +1402,7 @@ func (this *NodeService) UpdateNodeDNS(ctx context.Context, req *pb.UpdateNodeDN return nil, err } } else { - _, err = models.SharedNodeIPAddressDAO.CreateAddress(tx, adminId, req.NodeId, nodeconfigs.NodeRoleNode, "DNS IP", req.IpAddr, true, true) + _, err = models.SharedNodeIPAddressDAO.CreateAddress(tx, adminId, req.NodeId, nodeconfigs.NodeRoleNode, "DNS IP", req.IpAddr, true, true, 0) if err != nil { return nil, err } diff --git a/internal/rpc/services/service_node_ip_address.go b/internal/rpc/services/service_node_ip_address.go index dbae4e36..ffc49d84 100644 --- a/internal/rpc/services/service_node_ip_address.go +++ b/internal/rpc/services/service_node_ip_address.go @@ -21,7 +21,7 @@ func (this *NodeIPAddressService) CreateNodeIPAddress(ctx context.Context, req * tx := this.NullTx() - addressId, err := models.SharedNodeIPAddressDAO.CreateAddress(tx, adminId, req.NodeId, req.Role, req.Name, req.Ip, req.CanAccess, req.IsUp) + addressId, err := models.SharedNodeIPAddressDAO.CreateAddress(tx, adminId, req.NodeId, req.Role, req.Name, req.Ip, req.CanAccess, req.IsUp, 0) if err != nil { return nil, err } @@ -29,6 +29,34 @@ func (this *NodeIPAddressService) CreateNodeIPAddress(ctx context.Context, req * return &pb.CreateNodeIPAddressResponse{NodeIPAddressId: addressId}, nil } +// CreateNodeIPAddresses 批量创建IP地址 +func (this *NodeIPAddressService) CreateNodeIPAddresses(ctx context.Context, req *pb.CreateNodeIPAddressesRequest) (*pb.CreateNodeIPAddressesResponse, error) { + // 校验请求 + adminId, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + tx := this.NullTx() + + // 创建分组 + groupId, err := models.SharedNodeIPAddressGroupDAO.CreateGroup(tx, req.GroupValue, req.GroupValue) + if err != nil { + return nil, err + } + + var result = []int64{} + for _, ip := range req.IpList { + addressId, err := models.SharedNodeIPAddressDAO.CreateAddress(tx, adminId, req.NodeId, req.Role, req.Name, ip, req.CanAccess, req.IsUp, groupId) + if err != nil { + return nil, err + } + result = append(result, addressId) + } + + return &pb.CreateNodeIPAddressesResponse{NodeIPAddressIds: result}, nil +} + // UpdateNodeIPAddress 修改IP地址 func (this *NodeIPAddressService) UpdateNodeIPAddress(ctx context.Context, req *pb.UpdateNodeIPAddressRequest) (*pb.RPCSuccess, error) { // 校验请求