Add service template management

This commit is contained in:
cuigh
2017-10-09 21:02:41 +08:00
parent 8c00a7f69d
commit 722c7e3e09
28 changed files with 1301 additions and 1254 deletions

View File

@@ -25,7 +25,7 @@ type ServiceController struct {
New web.HandlerFunc `path:"/new" name:"service.new" authorize:"!" desc:"new service page"`
Create web.HandlerFunc `path:"/new" method:"post" name:"service.create" authorize:"!" desc:"create service"`
Edit web.HandlerFunc `path:"/:name/edit" name:"service.edit" authorize:"!" desc:"service edit page"`
Update web.HandlerFunc `path:"/:name/update" method:"post" name:"service.update" authorize:"!" desc:"update service"`
Update web.HandlerFunc `path:"/:name/edit" method:"post" name:"service.update" authorize:"!" desc:"update service"`
}
func Service() (c *ServiceController) {
@@ -114,6 +114,30 @@ func Service() (c *ServiceController) {
}
c.New = func(ctx web.Context) error {
service := &model.ServiceInfo{}
tid := ctx.Q("template")
if tid != "" {
tpl, err := biz.Template.Get(tid)
if err != nil {
return err
}
if tpl != nil {
err = json.Unmarshal([]byte(tpl.Content), service)
if err != nil {
return err
}
if service.Registry != "" {
registry, err := biz.Registry.Get(service.Registry)
if err != nil {
return err
}
service.RegistryURL = registry.URL
}
}
}
networks, err := docker.NetworkList()
if err != nil {
return err
@@ -130,7 +154,11 @@ func Service() (c *ServiceController) {
if err != nil {
return err
}
m := newModel(ctx).Add("Networks", networks).Add("Secrets", secrets).Add("Configs", configs).Add("Registries", registries)
checkedNetworks := set.FromSlice(service.Networks, func(i int) interface{} { return service.Networks[i] })
m := newModel(ctx).Add("Service", service).Add("Registries", registries).
Add("Networks", networks).Add("CheckedNetworks", checkedNetworks).
Add("Secrets", secrets).Add("Configs", configs)
return ctx.Render("service/new", m)
}
@@ -179,17 +207,10 @@ func Service() (c *ServiceController) {
}
checkedNetworks := set.FromSlice(service.Endpoint.VirtualIPs, func(i int) interface{} { return service.Endpoint.VirtualIPs[i].NetworkID })
checkedSecrets := set.FromSlice(service.Spec.TaskTemplate.ContainerSpec.Secrets, func(i int) interface{} {
return service.Spec.TaskTemplate.ContainerSpec.Secrets[i].SecretName
})
checkedConfigs := set.FromSlice(service.Spec.TaskTemplate.ContainerSpec.Configs, func(i int) interface{} {
return service.Spec.TaskTemplate.ContainerSpec.Configs[i].ConfigName
})
m := newModel(ctx).Add("Service", model.NewServiceInfo(service)).
Add("Networks", networks).Add("CheckedNetworks", checkedNetworks).
Add("Secrets", secrets).Add("CheckedSecrets", checkedSecrets).
Add("Configs", configs).Add("CheckedConfigs", checkedConfigs)
Add("Secrets", secrets).Add("Configs", configs)
return ctx.Render("service/edit", m)
}

View File

@@ -1,18 +1,170 @@
package controller
import "github.com/cuigh/auxo/net/web"
import (
"encoding/json"
"github.com/cuigh/auxo/data/set"
"github.com/cuigh/auxo/net/web"
"github.com/cuigh/swirl/biz"
"github.com/cuigh/swirl/biz/docker"
"github.com/cuigh/swirl/model"
)
type TemplateController struct {
List web.HandlerFunc `path:"/" name:"template.list" authorize:"!" desc:"service template list page"`
List web.HandlerFunc `path:"/" name:"template.list" authorize:"!" desc:"service template list page"`
New web.HandlerFunc `path:"/new" name:"template.new" authorize:"!" desc:"new service template page"`
Create web.HandlerFunc `path:"/new" method:"post" name:"template.create" authorize:"!" desc:"create service template"`
Edit web.HandlerFunc `path:"/:id/edit" name:"template.edit" authorize:"!" desc:"edit service template page"`
Update web.HandlerFunc `path:"/:id/edit" method:"post" name:"template.update" authorize:"!" desc:"update service template"`
Delete web.HandlerFunc `path:"/delete" method:"post" name:"template.delete" authorize:"!" desc:"delete service template"`
}
func Template() (c *TemplateController) {
c = &TemplateController{}
return &TemplateController{
List: templateList,
New: templateNew,
Create: templateCreate,
Edit: templateEdit,
Update: templateUpdate,
Delete: templateDelete,
}
}
c.List = func(ctx web.Context) error {
m := newModel(ctx)
return ctx.Render("service/template/list", m)
func templateList(ctx web.Context) error {
args := &model.TemplateListArgs{}
err := ctx.Bind(args)
if err != nil {
return err
}
return
args.PageSize = model.PageSize
if args.PageIndex == 0 {
args.PageIndex = 1
}
tpls, totalCount, err := biz.Template.List(args)
if err != nil {
return err
}
m := newPagerModel(ctx, totalCount, model.PageSize, args.PageIndex).
Add("Name", args.Name).
Add("Templates", tpls)
return ctx.Render("service/template/list", m)
}
func templateNew(ctx web.Context) error {
service := model.ServiceInfo{}
networks, err := docker.NetworkList()
if err != nil {
return err
}
secrets, _, err := docker.SecretList("", 1, 100)
if err != nil {
return err
}
configs, _, err := docker.ConfigList("", 1, 100)
if err != nil {
return err
}
registries, err := biz.Registry.List()
if err != nil {
return err
}
m := newModel(ctx).Add("Action", "New").Add("Service", service).Add("Registries", registries).
Add("Networks", networks).Add("CheckedNetworks", set.Set{}).
Add("Secrets", secrets).Add("Configs", configs)
return ctx.Render("service/template/edit", m)
}
func templateCreate(ctx web.Context) error {
info := &model.ServiceInfo{}
err := ctx.Bind(info)
if err == nil {
tpl := &model.Template{Name: info.Name}
info.Name = ""
content, err := json.Marshal(info)
if err != nil {
return err
}
tpl.Content = string(content)
err = biz.Template.Create(tpl, ctx.User())
}
return ajaxResult(ctx, err)
}
func templateEdit(ctx web.Context) error {
id := ctx.P("id")
tpl, err := biz.Template.Get(id)
if err != nil {
return err
} else if tpl == nil {
return web.ErrNotFound
}
service := &model.ServiceInfo{}
err = json.Unmarshal([]byte(tpl.Content), service)
if err != nil {
return err
}
service.Name = tpl.Name
if service.Registry != "" {
registry, err := biz.Registry.Get(service.Registry)
if err != nil {
return err
}
service.RegistryURL = registry.URL
}
networks, err := docker.NetworkList()
if err != nil {
return err
}
secrets, _, err := docker.SecretList("", 1, 100)
if err != nil {
return err
}
configs, _, err := docker.ConfigList("", 1, 100)
if err != nil {
return err
}
registries, err := biz.Registry.List()
if err != nil {
return err
}
checkedNetworks := set.FromSlice(service.Networks, func(i int) interface{} { return service.Networks[i] })
m := newModel(ctx).Add("Action", "Edit").Add("Service", service).Add("Registries", registries).
Add("Networks", networks).Add("CheckedNetworks", checkedNetworks).
Add("Secrets", secrets).Add("Configs", configs)
return ctx.Render("service/template/edit", m)
}
func templateUpdate(ctx web.Context) error {
info := &model.ServiceInfo{}
err := ctx.Bind(info)
if err == nil {
tpl := &model.Template{
ID: ctx.P("id"),
Name: info.Name,
}
info.Name = ""
content, err := json.Marshal(info)
if err != nil {
return err
}
tpl.Content = string(content)
err = biz.Template.Update(tpl, ctx.User())
}
return ajaxResult(ctx, err)
}
func templateDelete(ctx web.Context) error {
id := ctx.F("id")
err := biz.Template.Delete(id, ctx.User())
return ajaxResult(ctx, err)
}