dotcloud/docker

View on GitHub
daemon/cluster/filters.go

Summary

Maintainability
A
0 mins
Test Coverage
package cluster // import "github.com/docker/docker/daemon/cluster"

import (
    "fmt"
    "strings"

    "github.com/docker/docker/api/types/filters"
    swarmapi "github.com/moby/swarmkit/v2/api"
)

func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filters, error) {
    accepted := map[string]bool{
        "name":       true,
        "id":         true,
        "label":      true,
        "role":       true,
        "membership": true,
        "node.label": true,
    }
    if err := filter.Validate(accepted); err != nil {
        return nil, err
    }
    f := &swarmapi.ListNodesRequest_Filters{
        NamePrefixes: filter.Get("name"),
        IDPrefixes:   filter.Get("id"),
        Labels:       convertKVStringsToMap(filter.Get("label")),
        NodeLabels:   convertKVStringsToMap(filter.Get("node.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
}

func newListTasksFilters(filter filters.Args, transformFunc func(filters.Args) error) (*swarmapi.ListTasksRequest_Filters, error) {
    accepted := map[string]bool{
        "name":          true,
        "id":            true,
        "label":         true,
        "service":       true,
        "node":          true,
        "desired-state": true,
        // UpToDate is not meant to be exposed to users. It's for
        // internal use in checking create/update progress. Therefore,
        // we prefix it with a '_'.
        "_up-to-date": true,
        "runtime":     true,
    }
    if err := filter.Validate(accepted); err != nil {
        return nil, err
    }
    if transformFunc != nil {
        if err := transformFunc(filter); err != nil {
            return nil, err
        }
    }
    f := &swarmapi.ListTasksRequest_Filters{
        NamePrefixes: filter.Get("name"),
        IDPrefixes:   filter.Get("id"),
        Labels:       convertKVStringsToMap(filter.Get("label")),
        ServiceIDs:   filter.Get("service"),
        NodeIDs:      filter.Get("node"),
        UpToDate:     len(filter.Get("_up-to-date")) != 0,
        Runtimes:     filter.Get("runtime"),
    }

    for _, s := range filter.Get("desired-state") {
        if state, ok := swarmapi.TaskState_value[strings.ToUpper(s)]; ok {
            f.DesiredStates = append(f.DesiredStates, swarmapi.TaskState(state))
        } else if s != "" {
            return nil, fmt.Errorf("Invalid desired-state filter: '%s'", s)
        }
    }

    return f, nil
}

func newListSecretsFilters(filter filters.Args) (*swarmapi.ListSecretsRequest_Filters, error) {
    accepted := map[string]bool{
        "names": true,
        "name":  true,
        "id":    true,
        "label": true,
    }
    if err := filter.Validate(accepted); err != nil {
        return nil, err
    }
    return &swarmapi.ListSecretsRequest_Filters{
        Names:        filter.Get("names"),
        NamePrefixes: filter.Get("name"),
        IDPrefixes:   filter.Get("id"),
        Labels:       convertKVStringsToMap(filter.Get("label")),
    }, nil
}

func newListConfigsFilters(filter filters.Args) (*swarmapi.ListConfigsRequest_Filters, error) {
    accepted := map[string]bool{
        "name":  true,
        "id":    true,
        "label": true,
    }
    if err := filter.Validate(accepted); err != nil {
        return nil, err
    }
    return &swarmapi.ListConfigsRequest_Filters{
        NamePrefixes: filter.Get("name"),
        IDPrefixes:   filter.Get("id"),
        Labels:       convertKVStringsToMap(filter.Get("label")),
    }, nil
}