github.com/olljanat/moby@v1.13.1/daemon/cluster/filters.go (about)

     1  package cluster
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/docker/docker/api/types/filters"
     8  	runconfigopts "github.com/docker/docker/runconfig/opts"
     9  	swarmapi "github.com/docker/swarmkit/api"
    10  )
    11  
    12  func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) {
    13  	accepted := map[string]bool{
    14  		"name":       true,
    15  		"id":         true,
    16  		"label":      true,
    17  		"role":       true,
    18  		"membership": true,
    19  	}
    20  	if err := filter.Validate(accepted); err != nil {
    21  		return nil, err
    22  	}
    23  	f := &swarmapi.ListNodesRequest_Filters{
    24  		NamePrefixes: filter.Get("name"),
    25  		IDPrefixes:   filter.Get("id"),
    26  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
    27  	}
    28  
    29  	for _, r := range filter.Get("role") {
    30  		if role, ok := swarmapi.NodeRole_value[strings.ToUpper(r)]; ok {
    31  			f.Roles = append(f.Roles, swarmapi.NodeRole(role))
    32  		} else if r != "" {
    33  			return nil, fmt.Errorf("Invalid role filter: '%s'", r)
    34  		}
    35  	}
    36  
    37  	for _, a := range filter.Get("membership") {
    38  		if membership, ok := swarmapi.NodeSpec_Membership_value[strings.ToUpper(a)]; ok {
    39  			f.Memberships = append(f.Memberships, swarmapi.NodeSpec_Membership(membership))
    40  		} else if a != "" {
    41  			return nil, fmt.Errorf("Invalid membership filter: '%s'", a)
    42  		}
    43  	}
    44  
    45  	return f, nil
    46  }
    47  
    48  func newListServicesFilters(filter filters.Args) (*swarmapi.ListServicesRequest_Filters, error) {
    49  	accepted := map[string]bool{
    50  		"name":  true,
    51  		"id":    true,
    52  		"label": true,
    53  	}
    54  	if err := filter.Validate(accepted); err != nil {
    55  		return nil, err
    56  	}
    57  	return &swarmapi.ListServicesRequest_Filters{
    58  		NamePrefixes: filter.Get("name"),
    59  		IDPrefixes:   filter.Get("id"),
    60  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
    61  	}, nil
    62  }
    63  
    64  func newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) {
    65  	accepted := map[string]bool{
    66  		"name":          true,
    67  		"id":            true,
    68  		"label":         true,
    69  		"service":       true,
    70  		"node":          true,
    71  		"desired-state": true,
    72  	}
    73  	if err := filter.Validate(accepted); err != nil {
    74  		return nil, err
    75  	}
    76  	if transformFunc != nil {
    77  		if err := transformFunc(filter); err != nil {
    78  			return nil, err
    79  		}
    80  	}
    81  	f := &swarmapi.ListTasksRequest_Filters{
    82  		NamePrefixes: filter.Get("name"),
    83  		IDPrefixes:   filter.Get("id"),
    84  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
    85  		ServiceIDs:   filter.Get("service"),
    86  		NodeIDs:      filter.Get("node"),
    87  	}
    88  
    89  	for _, s := range filter.Get("desired-state") {
    90  		if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok {
    91  			f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state))
    92  		} else if s != "" {
    93  			return nil, fmt.Errorf("Invalid desired-state filter: '%s'", s)
    94  		}
    95  	}
    96  
    97  	return f, nil
    98  }
    99  
   100  func newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) {
   101  	accepted := map[string]bool{
   102  		"names": true,
   103  		"name":  true,
   104  		"id":    true,
   105  		"label": true,
   106  	}
   107  	if err := filter.Validate(accepted); err != nil {
   108  		return nil, err
   109  	}
   110  	return &swarmapi.ListSecretsRequest_Filters{
   111  		Names:        filter.Get("names"),
   112  		NamePrefixes: filter.Get("name"),
   113  		IDPrefixes:   filter.Get("id"),
   114  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
   115  	}, nil
   116  }