github.com/kobeld/docker@v1.12.0-rc1/daemon/cluster/filters.go (about)

     1  package cluster
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	runconfigopts "github.com/docker/docker/runconfig/opts"
     8  	"github.com/docker/engine-api/types/filters"
     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  		Names:      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  		Names:      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) (*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  	f := &swarmapi.ListTasksRequest_Filters{
    77  		Names:      filter.Get("name"),
    78  		IDPrefixes: filter.Get("id"),
    79  		Labels:     runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
    80  		ServiceIDs: filter.Get("service"),
    81  		NodeIDs:    filter.Get("node"),
    82  	}
    83  
    84  	for _, s := range filter.Get("desired_state") {
    85  		if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok {
    86  			f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state))
    87  		} else if s != "" {
    88  			return nil, fmt.Errorf("Invalid desired_state filter: '%s'", s)
    89  		}
    90  	}
    91  
    92  	return f, nil
    93  }