basic curd for image model

This commit is contained in:
w-mj 2023-03-30 22:17:18 +08:00
parent cf02a4b41b
commit 4e9d9b9cb0
No known key found for this signature in database
GPG Key ID: 3A2CB5BE2F835897
8 changed files with 155 additions and 34 deletions

View File

@ -6,8 +6,8 @@ import (
cp "github.com/otiai10/copy" cp "github.com/otiai10/copy"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/thoas/go-funk" "github.com/thoas/go-funk"
k8s_manager "k8s-manager/src"
"k8s-manager/src/model" "k8s-manager/src/model"
k8s_manager "k8s-manager/src/utils"
"net/http" "net/http"
"os" "os"
"strings" "strings"

View File

@ -3,9 +3,9 @@ package controller
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
k8s_manager "k8s-manager/src"
"k8s-manager/src/model" "k8s-manager/src/model"
"k8s-manager/src/service" "k8s-manager/src/service"
k8s_manager "k8s-manager/src/utils"
"k8s.io/api/apps/v1" "k8s.io/api/apps/v1"
"net/http" "net/http"
"strconv" "strconv"

View File

@ -0,0 +1,61 @@
package controller
import (
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"k8s-manager/src/model"
utils "k8s-manager/src/utils"
"net/http"
)
func AddImage(c *gin.Context) {
image := &model.ImageModel{}
if utils.GinErrorCheck(c, c.BindJSON(image)) {
return
}
username := c.MustGet("username").(string)
image.UserName = username
image.Create()
utils.GinOk(c, "ok")
}
func DeleteImage(c *gin.Context) {
image := &model.ImageModel{}
if utils.GinErrorCheck(c, c.BindJSON(image)) {
return
}
username := c.MustGet("username").(string)
oldImage := &model.ImageModel{Model: gorm.Model{ID: image.ID}}
oldImage.Fill()
if oldImage.UserName != username {
utils.GinError(c, http.StatusUnauthorized, "username error")
return
}
image.Delete()
}
func UpdateImage(c *gin.Context) {
image := &model.ImageModel{}
if utils.GinErrorCheck(c, c.BindJSON(image)) {
return
}
username := c.MustGet("username").(string)
oldImage := &model.ImageModel{Model: gorm.Model{ID: image.ID}}
oldImage.Fill()
if oldImage.UserName != username {
utils.GinError(c, http.StatusUnauthorized, "username error")
return
}
image.Save()
}
func MyImages(c *gin.Context) {
username := c.MustGet("username").(string)
myImages := model.GetMyImages(username)
c.JSON(http.StatusOK, gin.H{"images": myImages})
}
func PublicImages(c *gin.Context) {
myImages := model.GetPublicImages()
c.JSON(http.StatusOK, gin.H{"images": myImages})
}

23
src/model/data_model.go Normal file
View File

@ -0,0 +1,23 @@
package model
import (
"gorm.io/gorm"
k8s_manager "k8s-manager/src"
)
type DataModel struct {
gorm.Model
Type string
Name string
Comment string
AccessInfo string
}
func (*DataModel) TableName() string {
return "data"
}
func (d *DataModel) Fill() {
db := k8s_manager.DB()
db.First(d, d.ID)
}

55
src/model/image_model.go Normal file
View File

@ -0,0 +1,55 @@
package model
import (
"gorm.io/gorm"
k8s_manager "k8s-manager/src"
)
type ImageModel struct {
gorm.Model
Image string
Comment string
Command string
Env string
Port string
UserName string
IsPublished bool
}
func (*ImageModel) TableName() string {
return "images"
}
func (i *ImageModel) Fill() {
db := k8s_manager.DB()
db.First(i, i.ID)
}
func (i *ImageModel) Create() {
db := k8s_manager.DB()
db.Create(i)
}
func (i *ImageModel) Save() {
db := k8s_manager.DB()
db.Save(i)
}
func (i *ImageModel) Delete() {
db := k8s_manager.DB()
db.Delete(i)
}
func GetMyImages(username string) []ImageModel {
db := k8s_manager.DB()
ans := make([]ImageModel, 0)
db.Where(&ImageModel{UserName: username}).Find(&ans)
return ans
}
func GetPublicImages() []ImageModel {
db := k8s_manager.DB()
ans := make([]ImageModel, 0)
db.Where(&ImageModel{IsPublished: true}).Find(&ans)
return ans
}

View File

@ -22,33 +22,6 @@ func (*ProjectModel) TableName() string {
return "projects" return "projects"
} }
type ImageModel struct {
gorm.Model
Image string
Comment string
Command string
Env string
Port string
UserName string
IsPublished bool
}
func (*ImageModel) TableName() string {
return "images"
}
type DataModel struct {
gorm.Model
Type string
Name string
Comment string
AccessInfo string
}
func (*DataModel) TableName() string {
return "data"
}
type RunningProject struct { type RunningProject struct {
Project *ProjectModel Project *ProjectModel
StartTime *time.Time StartTime *time.Time

View File

@ -7,6 +7,7 @@ import (
"github.com/thoas/go-funk" "github.com/thoas/go-funk"
"k8s-manager/src" "k8s-manager/src"
"k8s-manager/src/model" "k8s-manager/src/model"
"k8s-manager/src/utils"
appv1 "k8s.io/api/apps/v1" appv1 "k8s.io/api/apps/v1"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
netv1 "k8s.io/api/networking/v1" netv1 "k8s.io/api/networking/v1"
@ -96,7 +97,7 @@ func (c *K8sClient) UpdateDeployment(app *model.AppModel) {
Labels: l, Labels: l,
}, },
Spec: appv1.DeploymentSpec{ Spec: appv1.DeploymentSpec{
Replicas: k8s_manager.UnnamedPointer(int32(1)), Replicas: utils.UnnamedPointer(int32(1)),
Selector: &metav1.LabelSelector{ Selector: &metav1.LabelSelector{
MatchLabels: l, MatchLabels: l,
}, },
@ -122,7 +123,7 @@ func (c *K8sClient) UpdateDeployment(app *model.AppModel) {
}, },
Ports: containerPorts, Ports: containerPorts,
SecurityContext: &v1.SecurityContext{ SecurityContext: &v1.SecurityContext{
RunAsUser: k8s_manager.UnnamedPointer(int64(0)), RunAsUser: utils.UnnamedPointer(int64(0)),
}, },
}}, }},
Volumes: []v1.Volume{ Volumes: []v1.Volume{
@ -315,7 +316,7 @@ func (c *K8sClient) UpdateIngress(a *model.AppModel) {
Annotations: annotations, Annotations: annotations,
}, },
Spec: netv1.IngressSpec{ Spec: netv1.IngressSpec{
IngressClassName: k8s_manager.UnnamedPointer("nginx"), IngressClassName: utils.UnnamedPointer("nginx"),
Rules: []netv1.IngressRule{ Rules: []netv1.IngressRule{
{ {
IngressRuleValue: netv1.IngressRuleValue{ IngressRuleValue: netv1.IngressRuleValue{
@ -323,7 +324,7 @@ func (c *K8sClient) UpdateIngress(a *model.AppModel) {
Paths: []netv1.HTTPIngressPath{ Paths: []netv1.HTTPIngressPath{
{ {
Path: "/svc/" + a.URLPrefix() + "(/|$)(.*)", Path: "/svc/" + a.URLPrefix() + "(/|$)(.*)",
PathType: k8s_manager.UnnamedPointer(netv1.PathTypePrefix), PathType: utils.UnnamedPointer(netv1.PathTypePrefix),
Backend: netv1.IngressBackend{ Backend: netv1.IngressBackend{
Service: &netv1.IngressServiceBackend{ Service: &netv1.IngressServiceBackend{
Name: a.ServiceName(), Name: a.ServiceName(),

View File

@ -1,4 +1,4 @@
package k8s_manager package utils
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -20,3 +20,11 @@ func GinOk(c *gin.Context, msg string) {
func GinOkData(c *gin.Context, data interface{}) { func GinOkData(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, gin.H{"ok": true, "data": data}) c.JSON(http.StatusOK, gin.H{"ok": true, "data": data})
} }
func GinErrorCheck(c *gin.Context, err error) bool {
if err != nil {
GinError(c, http.StatusBadRequest, err.Error())
return true
}
return false
}