【GO】 K8s 管理系统项目5[API部分--Node]
【GO】 K8s 管理系统项目[API部分--Node]
·
K8s 管理系统项目[API部分–Node]
1. 接口实现
service/dataselector.go
type nodeCell corev1.Node
func(n nodeCell) GetCreation() time.Time {
return n.CreationTimestamp.Time
}
func(n nodeCell) GetName() string {
return n.Name
}
2. Node功能
service/node.go
2.1 重写方法
func (n *node) toCells(std []corev1.Node) []DataCell {
cells := make([]DataCell, len(std))
for i := range std {
cells[i] = nodeCell(std[i])
}
return cells
}
func (n *node) fromCells(cells []DataCell) []corev1.Node {
nodes := make([]corev1.Node, len(cells))
for i := range cells {
nodes[i] = corev1.Node(cells[i].(nodeCell))
}
return nodes
}
2.2 获取node详情
// 获取node详情
func (n *node) GetNodeDetail(nodeName string) (node *corev1.Node, err error) {
node, err = K8s.ClientSet.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
if err != nil {
logger.Error(errors.New("获取Node详情失败, " + err.Error()))
return nil, errors.New("获取Node详情失败, " + err.Error())
}
return node, nil
}
2.3 node完整
package service
import (
"context"
"errors"
"github.com/wonderivan/logger"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
var Node node
type node struct{}
type NodesResp struct {
Items []corev1.Node `json:"items"`
Total int `json:"total"`
}
// 获取node列表,支持过滤、排序、分页
func (n *node) GetNodes(filterName string, limit, page int) (nodesResp *NodesResp, err error) {
//获取nodeList类型的node列表
nodeList, err := K8s.ClientSet.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
if err != nil {
logger.Error(errors.New("获取Node列表失败, " + err.Error()))
return nil, errors.New("获取Node列表失败, " + err.Error())
}
//将nodeList中的node列表(Items),放进dataselector对象中,进行排序
selectableData := &dataSelector{
GenericDataList: n.toCells(nodeList.Items),
DataSelect: &DataSelectQuery{
Filter: &FilterQuery{Name: filterName},
Paginate: &PaginateQuery{
Limit: limit,
Page: page,
},
},
}
filtered := selectableData.Filter()
total := len(filtered.GenericDataList)
data := filtered.Sort().Paginate()
//将[]DataCell类型的node列表转为v1.node列表
nodes := n.fromCells(data.GenericDataList)
return &NodesResp{
Items: nodes,
Total: total,
}, nil
}
// 获取node详情
func (n *node) GetNodeDetail(nodeName string) (node *corev1.Node, err error) {
node, err = K8s.ClientSet.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
if err != nil {
logger.Error(errors.New("获取Node详情失败, " + err.Error()))
return nil, errors.New("获取Node详情失败, " + err.Error())
}
return node, nil
}
func (n *node) toCells(std []corev1.Node) []DataCell {
cells := make([]DataCell, len(std))
for i := range std {
cells[i] = nodeCell(std[i])
}
return cells
}
func (n *node) fromCells(cells []DataCell) []corev1.Node {
nodes := make([]corev1.Node, len(cells))
for i := range cells {
nodes[i] = corev1.Node(cells[i].(nodeCell))
}
return nodes
}
3. 获取Node列表
controller/node.go
package controller
import (
"github.com/gin-gonic/gin"
"github.com/wonderivan/logger"
"k8s-plantform/service"
"net/http"
)
var Node node
type node struct {}
//获取node列表,支持过滤、排序、分页
func(n *node) GetNodes(ctx *gin.Context) {
params := new(struct {
FilterName string `form:"filter_name"`
Page int `form:"page"`
Limit int `form:"limit"`
})
if err := ctx.Bind(params); err != nil {
logger.Error("Bind请求参数失败, " + err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"msg": err.Error(),
"data": nil,
})
return
}
data, err := service.Node.GetNodes(params.FilterName, params.Limit, params.Page)
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{
"msg": err.Error(),
"data": nil,
})
return
}
ctx.JSON(http.StatusOK, gin.H{
"msg": "获取Node列表成功",
"data": data,
})
}
//获取node详情
func(n *node) GetNodeDetail(ctx *gin.Context) {
params := new(struct {
NodeName string `form:"node_name"`
})
if err := ctx.Bind(params); err != nil {
logger.Error("Bind请求参数失败, " + err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"msg": err.Error(),
"data": nil,
})
return
}
data, err := service.Node.GetNodeDetail(params.NodeName)
if err != nil {
ctx.JSON(http.StatusInternalServerError, gin.H{
"msg": err.Error(),
"data": nil,
})
return
}
ctx.JSON(http.StatusOK, gin.H{
"msg": "获取Node详情成功",
"data": data,
})
}
4. 定义路由
controller/router.go
//node操作
GET("/api/k8s/nodes", Node.GetNodes).
GET("/api/k8s/node/detail", Node.GetNodeDetail)
5. 测试Node方法
5.1 获取node节点
/api/k8s/nodes
5.2 获取node节点详情
/api/k8s/node/detail
更多推荐
已为社区贡献47条内容
所有评论(0)