Jelajahi Sumber

filter services by runtime; default to container

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
Evan Hazlett 8 tahun lalu
induk
melakukan
f71bdc67a2

+ 3 - 1
cli/command/service/list.go

@@ -45,7 +45,9 @@ func runList(dockerCli *command.DockerCli, opts listOptions) error {
 	ctx := context.Background()
 	client := dockerCli.Client()
 
-	services, err := client.ServiceList(ctx, types.ServiceListOptions{Filters: opts.filter.Value()})
+	serviceFilters := opts.filter.Value()
+	serviceFilters.Add("runtimes", string(swarm.RuntimeContainer))
+	services, err := client.ServiceList(ctx, types.ServiceListOptions{Filters: serviceFilters})
 	if err != nil {
 		return err
 	}

+ 4 - 0
cli/command/service/ps.go

@@ -7,6 +7,7 @@ import (
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
+	swarmtypes "github.com/docker/docker/api/types/swarm"
 	"github.com/docker/docker/cli"
 	"github.com/docker/docker/cli/command"
 	"github.com/docker/docker/cli/command/formatter"
@@ -58,8 +59,11 @@ func runPS(dockerCli *command.DockerCli, opts psOptions) error {
 	serviceIDFilter := filters.NewArgs()
 	serviceNameFilter := filters.NewArgs()
 	for _, service := range opts.services {
+		// default to container runtime
 		serviceIDFilter.Add("id", service)
+		serviceIDFilter.Add("runtimes", string(swarmtypes.RuntimeContainer))
 		serviceNameFilter.Add("name", service)
+		serviceNameFilter.Add("runtimes", string(swarmtypes.RuntimeContainer))
 	}
 	serviceByIDList, err := client.ServiceList(ctx, types.ServiceListOptions{Filters: serviceIDFilter})
 	if err != nil {

+ 7 - 1
cli/command/stack/common.go

@@ -17,6 +17,12 @@ func getStackFilter(namespace string) filters.Args {
 	return filter
 }
 
+func getServiceFilter(namespace string) filters.Args {
+	filter := getStackFilter(namespace)
+	filter.Add("runtimes", string(swarm.RuntimeContainer))
+	return filter
+}
+
 func getStackFilterFromOpt(namespace string, opt opts.FilterOpt) filters.Args {
 	filter := opt.Value()
 	filter.Add("label", convert.LabelNamespace+"="+namespace)
@@ -36,7 +42,7 @@ func getServices(
 ) ([]swarm.Service, error) {
 	return apiclient.ServiceList(
 		ctx,
-		types.ServiceListOptions{Filters: getStackFilter(namespace)})
+		types.ServiceListOptions{Filters: getServiceFilter(namespace)})
 }
 
 func getStackNetworks(

+ 7 - 4
daemon/cluster/services.go

@@ -40,18 +40,21 @@ func (c *Cluster) GetServices(options apitypes.ServiceListOptions) ([]types.Serv
 	// be good to have accepted file check in the same file as
 	// the filter processing (in the for loop below).
 	accepted := map[string]bool{
-		"name":  true,
-		"id":    true,
-		"label": true,
-		"mode":  true,
+		"name":     true,
+		"id":       true,
+		"label":    true,
+		"mode":     true,
+		"runtimes": true,
 	}
 	if err := options.Filters.Validate(accepted); err != nil {
 		return nil, err
 	}
+
 	filters := &swarmapi.ListServicesRequest_Filters{
 		NamePrefixes: options.Filters.Get("name"),
 		IDPrefixes:   options.Filters.Get("id"),
 		Labels:       runconfigopts.ConvertKVStringsToMap(options.Filters.Get("label")),
+		Runtimes:     options.Filters.Get("runtimes"),
 	}
 
 	ctx, cancel := c.getRequestContext()