2
0
mirror of https://github.com/cuigh/swirl synced 2025-02-24 21:13:48 +00:00

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
biz/docker
controller
model
views/_modules

View File

@ -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
}

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -25,7 +25,7 @@
<div class="control">
{{ 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}}
</div>
</div>