From 462b6bed2d2d26eb48211007d18547bb49586785 Mon Sep 17 00:00:00 2001 From: cuigh Date: Fri, 16 Mar 2018 21:06:13 +0800 Subject: [PATCH] Fix checked state on edit service with host network --- biz/docker/network.go | 19 +++++++++++++++++++ controller/service.go | 12 ++++++++---- controller/template.go | 7 ++++++- model/docker.go | 4 ++-- views/_modules/service.jet | 2 +- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/biz/docker/network.go b/biz/docker/network.go index 00f6c1a..2925a69 100644 --- a/biz/docker/network.go +++ b/biz/docker/network.go @@ -120,3 +120,22 @@ func NetworkInspectRaw(name string) (raw []byte, err error) { } return } + +// NetworkNames return network names by id list. +func NetworkNames(ids ...string) (names []string, err error) { + var ( + ctx context.Context + cli *client.Client + ) + if ctx, cli, err = mgr.Client(); err == nil { + for _, id := range ids { + var n types.NetworkResource + n, err = cli.NetworkInspect(ctx, id, types.NetworkInspectOptions{}) + if err != nil { + break + } + names = append(names, n.Name) + } + } + return +} diff --git a/controller/service.go b/controller/service.go index 2fc758e..dfef2c9 100644 --- a/controller/service.go +++ b/controller/service.go @@ -222,11 +222,15 @@ func serviceEdit(ctx web.Context) error { return err } - stack := service.Spec.Labels["com.docker.stack.namespace"] - checkedNetworks := set.StringSet{} - checkedNetworks.AddSlice(service.Endpoint.VirtualIPs, func(i int) string { return service.Endpoint.VirtualIPs[i].NetworkID }) + si := model.NewServiceInfo(service) + names, err := docker.NetworkNames(si.Networks...) + if err != nil { + return err + } + checkedNetworks := set.NewStringSet(names...) - m := newModel(ctx).Set("Service", model.NewServiceInfo(service)).Set("Stack", stack). + m := newModel(ctx).Set("Service", si). + Set("Stack", service.Spec.Labels["com.docker.stack.namespace"]). Set("Networks", networks).Set("CheckedNetworks", checkedNetworks). Set("Secrets", secrets).Set("Configs", configs) return ctx.Render("service/edit", m) diff --git a/controller/template.go b/controller/template.go index 5d61920..b6af9b3 100644 --- a/controller/template.go +++ b/controller/template.go @@ -100,6 +100,7 @@ func templateCreate(ctx web.Context) error { return ajaxResult(ctx, err) } +// nolint: gocyclo func templateEdit(ctx web.Context) error { id := ctx.P("id") tpl, err := biz.Template.Get(id) @@ -143,7 +144,11 @@ func templateEdit(ctx web.Context) error { return err } - checkedNetworks := set.NewStringSet(service.Networks...) + names, err := docker.NetworkNames(service.Networks...) + if err != nil { + return err + } + checkedNetworks := set.NewStringSet(names...) m := newModel(ctx).Set("Action", "Edit").Set("Service", service).Set("Registries", registries). Set("Networks", networks).Set("CheckedNetworks", checkedNetworks). Set("Secrets", secrets).Set("Configs", configs) diff --git a/model/docker.go b/model/docker.go index dbdcb4b..984a175 100644 --- a/model/docker.go +++ b/model/docker.go @@ -254,8 +254,8 @@ func NewServiceInfo(service swarm.Service) *ServiceInfo { ServiceLabels: NewOptions(spec.Labels), ContainerLabels: NewOptions(spec.TaskTemplate.ContainerSpec.Labels), } - for _, vip := range service.Endpoint.VirtualIPs { - si.Networks = append(si.Networks, vip.NetworkID) + for _, n := range service.Spec.TaskTemplate.Networks { + si.Networks = append(si.Networks, n.Target) } if spec.EndpointSpec != nil { si.Endpoint.Mode = spec.EndpointSpec.Mode diff --git a/views/_modules/service.jet b/views/_modules/service.jet index 50af073..706758e 100644 --- a/views/_modules/service.jet +++ b/views/_modules/service.jet @@ -25,7 +25,7 @@
{{ set := .CheckedNetworks }} {{range .Networks}} - {{ yield checkbox(name="networks", value=.ID, label=.Name, checked=set.Contains(.ID)) }} + {{ yield checkbox(name="networks", value=.ID, label=.Name, checked=set.Contains(.Name)) }} {{end}}