func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) { accepted := map[string]bool{ "name": true, "id": true, "label": true, "role": true, "membership": true, } if err := filter.Validate(accepted); err != nil { return nil, err } f := &swarmapi.ListNodesRequest_Filters{ Names: filter.Get("name"), IDPrefixes: filter.Get("id"), Labels: runconfigopts.ConvertKVStringsToMap(filter.Get("label")), } for _, r := range filter.Get("role") { if role, ok := swarmapi.NodeRole_value[strings.ToUpper(r)]; ok { f.Roles = append(f.Roles, swarmapi.NodeRole(role)) } else if r != "" { return nil, fmt.Errorf("Invalid role filter: '%s'", r) } } for _, a := range filter.Get("membership") { if membership, ok := swarmapi.NodeSpec_Membership_value[strings.ToUpper(a)]; ok { f.Memberships = append(f.Memberships, swarmapi.NodeSpec_Membership(membership)) } else if a != "" { return nil, fmt.Errorf("Invalid membership filter: '%s'", a) } } return f, nil }
// NodeSpecToGRPC converts a NodeSpec to a grpc NodeSpec. func NodeSpecToGRPC(s types.NodeSpec) (swarmapi.NodeSpec, error) { spec := swarmapi.NodeSpec{ Annotations: swarmapi.Annotations{ Name: s.Name, Labels: s.Labels, }, } if role, ok := swarmapi.NodeRole_value[strings.ToUpper(string(s.Role))]; ok { spec.Role = swarmapi.NodeRole(role) } else { return swarmapi.NodeSpec{}, fmt.Errorf("invalid Role: %q", s.Role) } if membership, ok := swarmapi.NodeSpec_Membership_value[strings.ToUpper(string(s.Membership))]; ok { spec.Membership = swarmapi.NodeSpec_Membership(membership) } else { return swarmapi.NodeSpec{}, fmt.Errorf("invalid Membership: %q", s.Membership) } if availability, ok := swarmapi.NodeSpec_Availability_value[strings.ToUpper(string(s.Availability))]; ok { spec.Availability = swarmapi.NodeSpec_Availability(availability) } else { return swarmapi.NodeSpec{}, fmt.Errorf("invalid Availability: %q", s.Availability) } return spec, nil }