当前位置: 首页 > news >正文

【GO】K8s 管理系统项目9[API部分--Secret]

K8s 管理系统项目[API部分–Secret]

1. 接口实现

service/dataselector.go

// secret
type secretCell corev1.Secretfunc (s secretCell) GetCreation() time.Time {return s.CreationTimestamp.Time
}func (s secretCell) GetName() string {return s.Name
}

2. Secret功能

service/secret.go

package serviceimport ("context""encoding/json""errors""github.com/wonderivan/logger"corev1 "k8s.io/api/core/v1"metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)var Secret secrettype secret struct{}type SecretsResp struct {Items []corev1.Secret `json:"items"`Total int             `json:"total"`
}// 获取secret列表,支持过滤、排序、分页
func (s *secret) GetSecrets(filterName, namespace string, limit, page int) (secretsResp *SecretsResp, err error) {//获取secretList类型的secret列表secretList, err := K8s.ClientSet.CoreV1().Secrets(namespace).List(context.TODO(), metav1.ListOptions{})if err != nil {logger.Error(errors.New("获取Secret列表失败, " + err.Error()))return nil, errors.New("获取Secret列表失败, " + err.Error())}//将secretList中的secret列表(Items),放进dataselector对象中,进行排序selectableData := &dataSelector{GenericDataList: s.toCells(secretList.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类型的secret列表转为v1.secret列表secrets := s.fromCells(data.GenericDataList)return &SecretsResp{Items: secrets,Total: total,}, nil
}// 获取secret详情
func (s *secret) GetSecretDetail(secretName, namespace string) (secret *corev1.Secret, err error) {secret, err = K8s.ClientSet.CoreV1().Secrets(namespace).Get(context.TODO(), secretName, metav1.GetOptions{})if err != nil {logger.Error(errors.New("获取Secret详情失败, " + err.Error()))return nil, errors.New("获取Secret详情失败, " + err.Error())}return secret, nil
}// 删除secret
func (s *secret) DeleteSecret(secretName, namespace string) (err error) {err = K8s.ClientSet.CoreV1().Secrets(namespace).Delete(context.TODO(), secretName, metav1.DeleteOptions{})if err != nil {logger.Error(errors.New("删除Secret失败, " + err.Error()))return errors.New("删除Secret失败, " + err.Error())}return nil
}// 更新secret
func (s *secret) UpdateSecret(namespace, content string) (err error) {var secret = &corev1.Secret{}err = json.Unmarshal([]byte(content), secret)if err != nil {logger.Error(errors.New("反序列化失败, " + err.Error()))return errors.New("反序列化失败, " + err.Error())}_, err = K8s.ClientSet.CoreV1().Secrets(namespace).Update(context.TODO(), secret, metav1.UpdateOptions{})if err != nil {logger.Error(errors.New("更新Secret失败, " + err.Error()))return errors.New("更新Secret失败, " + err.Error())}return nil
}func (s *secret) toCells(std []corev1.Secret) []DataCell {cells := make([]DataCell, len(std))for i := range std {cells[i] = secretCell(std[i])}return cells
}func (s *secret) fromCells(cells []DataCell) []corev1.Secret {secrets := make([]corev1.Secret, len(cells))for i := range cells {secrets[i] = corev1.Secret(cells[i].(secretCell))}return secrets
}

3. 获取Secret列表

controller/secret.go

package controllerimport ("k8s-plantform/service""net/http""github.com/gin-gonic/gin""github.com/wonderivan/logger"
)var Secret secrettype secret struct{}// 获取secret列表,支持过滤、排序、分页
func (s *secret) GetSecrets(ctx *gin.Context) {params := new(struct {FilterName string `form:"filter_name"`Namespace  string `form:"namespace"`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.Secret.GetSecrets(params.FilterName, params.Namespace, 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":  "获取Secret列表成功","data": data,})
}// 获取secret详情
func (s *secret) GetSecretDetail(ctx *gin.Context) {params := new(struct {SecretName string `form:"secret_name"`Namespace  string `form:"namespace"`})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.Secret.GetSecretDetail(params.SecretName, params.Namespace)if err != nil {ctx.JSON(http.StatusInternalServerError, gin.H{"msg":  err.Error(),"data": nil,})return}ctx.JSON(http.StatusOK, gin.H{"msg":  "获取Secret详情成功","data": data,})
}// 删除secret
func (s *secret) DeleteSecret(ctx *gin.Context) {params := new(struct {SecretName string `json:"secret_name"`Namespace  string `json:"namespace"`})//DELETE请求,绑定参数方法改为ctx.ShouldBindJSONif err := ctx.ShouldBindJSON(params); err != nil {logger.Error("Bind请求参数失败, " + err.Error())ctx.JSON(http.StatusInternalServerError, gin.H{"msg":  err.Error(),"data": nil,})return}err := service.Secret.DeleteSecret(params.SecretName, params.Namespace)if err != nil {ctx.JSON(http.StatusInternalServerError, gin.H{"msg":  err.Error(),"data": nil,})return}ctx.JSON(http.StatusOK, gin.H{"msg":  "删除Secret成功","data": nil,})
}// 更新secret
func (s *secret) UpdateSecret(ctx *gin.Context) {params := new(struct {Namespace string `json:"namespace"`Content   string `json:"content"`})//PUT请求,绑定参数方法改为ctx.ShouldBindJSONif err := ctx.ShouldBindJSON(params); err != nil {logger.Error("Bind请求参数失败, " + err.Error())ctx.JSON(http.StatusInternalServerError, gin.H{"msg":  err.Error(),"data": nil,})return}err := service.Secret.UpdateSecret(params.Namespace, params.Content)if err != nil {ctx.JSON(http.StatusInternalServerError, gin.H{"msg":  err.Error(),"data": nil,})return}ctx.JSON(http.StatusOK, gin.H{"msg":  "更新Secret成功","data": nil,})
}

4. 定义路由

controller/router.go

		// secretGET("/api/k8s/secrets", Secret.GetSecrets).GET("/api/k8s/secret/detail", Secret.GetSecretDetail).DELETE("/api/k8s/secret/del", Secret.DeleteSecret).PUT("/api/k8s/secret/update", Secret.UpdateSecret)

5. 测试Secret方法

5.1 获取Secrets

请添加图片描述

5.2 获取Secret详情

请添加图片描述

其余等做好前端一起测试

http://www.lryc.cn/news/18299.html

相关文章:

  • ESP32 Arduino EspNow点对点双向通讯
  • Linux SID 开发指南
  • Matlab进阶绘图第2期—线型热图
  • 【Redis中bigkey你了解吗?bigkey的危害?】
  • C++回顾(一)——从C到C++
  • CRF条件随机场 | 关键原理+面试知识点
  • 秒懂算法 | 回归算法中的贝叶斯
  • 用Netty实现物联网01:XML-RPC和JSON-RPC
  • 腾讯云服务器centos7安装python3.7+,解决ssl问题
  • C++【模板STL简介】
  • 该学会是自己找bug了(vs调试技巧)
  • Redis大全(概念与下载安装)
  • 指针的进阶【上篇】
  • MATLAB | 如何用MATLAB绘制花里胡哨的山脊图
  • .Net与程序集
  • 软考中级之数据库系统(重点)
  • 界面控件DevExtreme的Data Grid组件——让业务信息管理更轻松!
  • 【架构师】零基础到精通——网关策略
  • 【java 8】方法引用与构造器引用
  • SGI 空间配置器
  • 2023年白酒行业研究报告
  • 华为OD机试 -合规数组(Java) | 机试题+算法思路+考点+代码解析 【2023】
  • 华为OD机试真题Python实现【英文输入法】真题+解题思路+代码(20222023)
  • 改进YOLO系列 | 添加轻量化Decouple_Head 和 ASFF_Head
  • LLFlow沦为和代码解读
  • C语言学习及复习笔记-【9】数组
  • Kubernetes入门教程 --- 使用kubeadm进行集群安装
  • 华为OD机试真题Python实现【相对开音节】真题+解题思路+代码(20222023)
  • 海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路
  • javaee之node.js与es6