github.com/lazyboychen7/engine@v17.12.1-ce-rc2+incompatible/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 newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) {
    49  	accepted := map[string]bool{
    50  		"name":          true,
    51  		"id":            true,
    52  		"label":         true,
    53  		"service":       true,
    54  		"node":          true,
    55  		"desired-state": true,
    56  		// UpToDate is not meant to be exposed to users. It's for
    57  		// internal use in checking create/update progress. Therefore,
    58  		// we prefix it with a '_'.
    59  		"_up-to-date": true,
    60  		"runtime":     true,
    61  	}
    62  	if err := filter.Validate(accepted); err != nil {
    63  		return nil, err
    64  	}
    65  	if transformFunc != nil {
    66  		if err := transformFunc(filter); err != nil {
    67  			return nil, err
    68  		}
    69  	}
    70  	f := &swarmapi.ListTasksRequest_Filters{
    71  		NamePrefixes: filter.Get("name"),
    72  		IDPrefixes:   filter.Get("id"),
    73  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
    74  		ServiceIDs:   filter.Get("service"),
    75  		NodeIDs:      filter.Get("node"),
    76  		UpToDate:     len(filter.Get("_up-to-date")) != 0,
    77  		Runtimes:     filter.Get("runtime"),
    78  	}
    79  
    80  	for _, s := range filter.Get("desired-state") {
    81  		if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok {
    82  			f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state))
    83  		} else if s != "" {
    84  			return nil, fmt.Errorf("Invalid desired-state filter: '%s'", s)
    85  		}
    86  	}
    87  
    88  	return f, nil
    89  }
    90  
    91  func newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) {
    92  	accepted := map[string]bool{
    93  		"names": true,
    94  		"name":  true,
    95  		"id":    true,
    96  		"label": true,
    97  	}
    98  	if err := filter.Validate(accepted); err != nil {
    99  		return nil, err
   100  	}
   101  	return &swarmapi.ListSecretsRequest_Filters{
   102  		Names:        filter.Get("names"),
   103  		NamePrefixes: filter.Get("name"),
   104  		IDPrefixes:   filter.Get("id"),
   105  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
   106  	}, nil
   107  }
   108  
   109  func newListConfigsFilters(filter filters.Args) (*swarmapi.ListConfigsRequest_Filters, error) {
   110  	accepted := map[string]bool{
   111  		"name":  true,
   112  		"id":    true,
   113  		"label": true,
   114  	}
   115  	if err := filter.Validate(accepted); err != nil {
   116  		return nil, err
   117  	}
   118  	return &swarmapi.ListConfigsRequest_Filters{
   119  		NamePrefixes: filter.Get("name"),
   120  		IDPrefixes:   filter.Get("id"),
   121  		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
   122  	}, nil
   123  }