func runList(dockerCli *client.DockerCli, opts listOptions) error { ctx := context.Background() client := dockerCli.Client() services, err := client.ServiceList(ctx, types.ServiceListOptions{Filter: opts.filter.Value()}) if err != nil { return err } out := dockerCli.Out() if opts.quiet { PrintQuiet(out, services) } else { taskFilter := filters.NewArgs() for _, service := range services { taskFilter.Add("service", service.ID) } tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: taskFilter}) if err != nil { return err } nodes, err := client.NodeList(ctx, types.NodeListOptions{}) if err != nil { return err } PrintNotQuiet(out, services, nodes, tasks) } return nil }
func runList(dockerCli *client.DockerCli, opts listOptions) error { ctx := context.Background() client := dockerCli.Client() services, err := client.ServiceList(ctx, types.ServiceListOptions{Filter: opts.filter.Value()}) if err != nil { return err } out := dockerCli.Out() if opts.quiet { printQuiet(out, services) } else { taskFilter := filters.NewArgs() for _, service := range services { taskFilter.Add("service", service.ID) } tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: taskFilter}) if err != nil { return err } running := map[string]int{} for _, task := range tasks { if task.Status.State == "running" { running[task.ServiceID]++ } } printTable(out, services, running) } return nil }
func runList(dockerCli *client.DockerCli, opts listOptions) error { ctx := context.Background() client := dockerCli.Client() services, err := client.ServiceList(ctx, types.ServiceListOptions{Filter: opts.filter.Value()}) if err != nil { return err } out := dockerCli.Out() if opts.quiet { printQuiet(out, services) } else { taskFilter := filters.NewArgs() for _, service := range services { taskFilter.Add("service", service.ID) } tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: taskFilter}) if err != nil { return err } nodes, err := client.NodeList(ctx, types.NodeListOptions{}) if err != nil { return err } activeNodes := make(map[string]struct{}) for _, n := range nodes { if n.Status.State == swarm.NodeStateReady { activeNodes[n.ID] = struct{}{} } } running := map[string]int{} for _, task := range tasks { if _, nodeActive := activeNodes[task.NodeID]; nodeActive && task.Status.State == "running" { running[task.ServiceID]++ } } printTable(out, services, running) } return nil }
func runList(dockerCli *client.DockerCli, opts listOptions) error { client := dockerCli.Client() services, err := client.ServiceList( context.Background(), types.ServiceListOptions{Filter: opts.filter.Value()}) if err != nil { return err } out := dockerCli.Out() if opts.quiet { printQuiet(out, services) } else { printTable(out, services) } return nil }
func runServices(dockerCli *client.DockerCli, opts servicesOptions) error { ctx := context.Background() client := dockerCli.Client() filter := opts.filter.Value() filter.Add("label", labelNamespace+"="+opts.namespace) services, err := client.ServiceList(ctx, types.ServiceListOptions{Filter: filter}) if err != nil { return err } out := dockerCli.Out() // if no services in this stack, print message and exit 0 if len(services) == 0 { fmt.Fprintf(out, "Nothing found in stack: %s\n", opts.namespace) return nil } if opts.quiet { service.PrintQuiet(out, services) } else { taskFilter := filters.NewArgs() for _, service := range services { taskFilter.Add("service", service.ID) } tasks, err := client.TaskList(ctx, types.TaskListOptions{Filter: taskFilter}) if err != nil { return err } nodes, err := client.NodeList(ctx, types.NodeListOptions{}) if err != nil { return err } service.PrintNotQuiet(out, services, nodes, tasks) } return nil }