basic curd for image model
This commit is contained in:
parent
cf02a4b41b
commit
4e9d9b9cb0
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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})
|
||||||
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue