Fix checked state on edit service with host network

This commit is contained in:
cuigh 2018-03-16 21:06:13 +08:00
parent 326c8084fd
commit 462b6bed2d
5 changed files with 36 additions and 8 deletions

View File

@ -120,3 +120,22 @@ func NetworkInspectRaw(name string) (raw []byte, err error) {
} }
return 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
}

View File

@ -222,11 +222,15 @@ func serviceEdit(ctx web.Context) error {
return err return err
} }
stack := service.Spec.Labels["com.docker.stack.namespace"] si := model.NewServiceInfo(service)
checkedNetworks := set.StringSet{} names, err := docker.NetworkNames(si.Networks...)
checkedNetworks.AddSlice(service.Endpoint.VirtualIPs, func(i int) string { return service.Endpoint.VirtualIPs[i].NetworkID }) 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("Networks", networks).Set("CheckedNetworks", checkedNetworks).
Set("Secrets", secrets).Set("Configs", configs) Set("Secrets", secrets).Set("Configs", configs)
return ctx.Render("service/edit", m) return ctx.Render("service/edit", m)

View File

@ -100,6 +100,7 @@ func templateCreate(ctx web.Context) error {
return ajaxResult(ctx, err) return ajaxResult(ctx, err)
} }
// nolint: gocyclo
func templateEdit(ctx web.Context) error { func templateEdit(ctx web.Context) error {
id := ctx.P("id") id := ctx.P("id")
tpl, err := biz.Template.Get(id) tpl, err := biz.Template.Get(id)
@ -143,7 +144,11 @@ func templateEdit(ctx web.Context) error {
return err 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). m := newModel(ctx).Set("Action", "Edit").Set("Service", service).Set("Registries", registries).
Set("Networks", networks).Set("CheckedNetworks", checkedNetworks). Set("Networks", networks).Set("CheckedNetworks", checkedNetworks).
Set("Secrets", secrets).Set("Configs", configs) Set("Secrets", secrets).Set("Configs", configs)

View File

@ -254,8 +254,8 @@ func NewServiceInfo(service swarm.Service) *ServiceInfo {
ServiceLabels: NewOptions(spec.Labels), ServiceLabels: NewOptions(spec.Labels),
ContainerLabels: NewOptions(spec.TaskTemplate.ContainerSpec.Labels), ContainerLabels: NewOptions(spec.TaskTemplate.ContainerSpec.Labels),
} }
for _, vip := range service.Endpoint.VirtualIPs { for _, n := range service.Spec.TaskTemplate.Networks {
si.Networks = append(si.Networks, vip.NetworkID) si.Networks = append(si.Networks, n.Target)
} }
if spec.EndpointSpec != nil { if spec.EndpointSpec != nil {
si.Endpoint.Mode = spec.EndpointSpec.Mode si.Endpoint.Mode = spec.EndpointSpec.Mode

View File

@ -25,7 +25,7 @@
<div class="control"> <div class="control">
{{ set := .CheckedNetworks }} {{ set := .CheckedNetworks }}
{{range .Networks}} {{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}} {{end}}
</div> </div>
</div> </div>