filters.go 2.8 KB

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