168 lines
3.2 KiB
Go
168 lines
3.2 KiB
Go
package k8s_manager
|
|
|
|
import (
|
|
"fmt"
|
|
v1 "k8s.io/api/core/v1"
|
|
"strings"
|
|
"unicode"
|
|
)
|
|
|
|
type AppModel struct {
|
|
Id int
|
|
AppName string
|
|
UserName string
|
|
Image string
|
|
Command string
|
|
Comment string
|
|
Env string
|
|
SvcName string
|
|
Ports string
|
|
}
|
|
|
|
func (*AppModel) TableName() string {
|
|
return "app"
|
|
}
|
|
|
|
func GetApps(username string) []AppModel {
|
|
db := DB()
|
|
ans := make([]AppModel, 0)
|
|
db.Where("user_name = ?", username).Find(&ans)
|
|
return ans
|
|
}
|
|
|
|
func (a *AppModel) Fill() error {
|
|
db := DB()
|
|
res := db.First(a, a.Id)
|
|
return res.Error
|
|
}
|
|
|
|
func (a *AppModel) Update() error {
|
|
if a.SvcName == "" {
|
|
a.SvcName = "svc"
|
|
}
|
|
a.SvcName = strings.TrimPrefix(a.SvcName, a.NamePrefix()+"-")
|
|
db := DB()
|
|
db.Save(a)
|
|
return nil
|
|
}
|
|
|
|
func (a *AppModel) Create() error {
|
|
if a.SvcName == "" {
|
|
a.SvcName = "svc"
|
|
}
|
|
a.SvcName = strings.TrimPrefix(a.SvcName, a.NamePrefix()+"-")
|
|
db := DB()
|
|
db.Create(a)
|
|
return nil
|
|
}
|
|
|
|
func (a *AppModel) Delete() error {
|
|
db := DB()
|
|
db.Delete(a, a.Id)
|
|
return nil
|
|
}
|
|
|
|
func (a *AppModel) NamePrefix() string {
|
|
prefix := fmt.Sprintf("%s-%s", a.UserName, a.AppName)
|
|
ans := strings.Builder{}
|
|
for _, c := range prefix {
|
|
if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-' {
|
|
ans.WriteRune(c)
|
|
} else {
|
|
ans.WriteString(fmt.Sprintf("-%d-", c))
|
|
}
|
|
}
|
|
return ans.String()
|
|
}
|
|
|
|
func (a *AppModel) PodName() string {
|
|
return fmt.Sprintf("%s-pod", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) ContainerName() string {
|
|
return fmt.Sprintf("%s-container", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) ServiceName() string {
|
|
if len(a.GetPorts()) == 0 {
|
|
return ""
|
|
}
|
|
if strings.TrimSpace(a.SvcName) != "" {
|
|
return fmt.Sprintf("%s-%s", a.NamePrefix(), a.SvcName)
|
|
}
|
|
return a.DefaultServiceName()
|
|
}
|
|
|
|
func (a *AppModel) DefaultServiceName() string {
|
|
return fmt.Sprintf("%s-svc", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) DeploymentName() string {
|
|
return fmt.Sprintf("%s-deployment", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) GetCommandOrBlack() []string {
|
|
if strings.TrimSpace(a.Command) != "" {
|
|
return []string{"/bin/sh", "-c", a.Command}
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func (a *AppModel) GetLabel() (string, string) {
|
|
return "cg-label", fmt.Sprintf("%s-label", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) GetEnv() []v1.EnvVar {
|
|
if strings.TrimSpace(a.Env) == "" {
|
|
return nil
|
|
}
|
|
sep1 := strings.Split(a.Env, " ")
|
|
ans := make([]v1.EnvVar, len(sep1))
|
|
for i, v := range sep1 {
|
|
kv := strings.SplitN(v, "=", 2)
|
|
ans[i].Name = kv[0]
|
|
if len(kv) == 2 {
|
|
ans[i].Value = kv[1]
|
|
}
|
|
}
|
|
return ans
|
|
}
|
|
|
|
func (a *AppModel) GetPorts() []int32 {
|
|
ans := make([]int32, 0)
|
|
var cur int32 = 0
|
|
for _, c := range a.Ports {
|
|
if unicode.IsNumber(c) {
|
|
cur = cur*10 + (c - '0')
|
|
} else if cur > 0 {
|
|
ans = append(ans, cur)
|
|
cur = 0
|
|
}
|
|
}
|
|
if cur > 0 {
|
|
ans = append(ans, cur)
|
|
}
|
|
return ans
|
|
}
|
|
|
|
func (a *AppModel) IngressName() string {
|
|
return fmt.Sprintf("%s-ingress", a.NamePrefix())
|
|
}
|
|
|
|
func (a *AppModel) PersistentVolumeName() string {
|
|
return a.UserName + "-pv"
|
|
}
|
|
|
|
func (a *AppModel) NFSPath() string {
|
|
return "/data/" + a.UserName
|
|
}
|
|
|
|
func (a *AppModel) PersistentVolumeClaimName() string {
|
|
return a.NamePrefix() + "-pvc"
|
|
}
|
|
|
|
func (a *AppModel) StorageClassName() string {
|
|
return a.NamePrefix() + "-storage-class"
|
|
}
|