Explorar el Código

Merge pull request #37650 from anshulpundir/vndr

Add support for filtering on node labels
Sebastiaan van Stijn hace 6 años
padre
commit
a0385f7ad7
Se han modificado 3 ficheros con 7 adiciones y 0 borrados
  1. 1 0
      api/swagger.yaml
  2. 2 0
      daemon/cluster/filters.go
  3. 4 0
      docs/api/version-history.md

+ 1 - 0
api/swagger.yaml

@@ -8609,6 +8609,7 @@ paths:
             - `label=<engine label>`
             - `label=<engine label>`
             - `membership=`(`accepted`|`pending`)`
             - `membership=`(`accepted`|`pending`)`
             - `name=<node name>`
             - `name=<node name>`
+            - `node.label=<node label>`
             - `role=`(`manager`|`worker`)`
             - `role=`(`manager`|`worker`)`
           type: "string"
           type: "string"
       tags: ["Node"]
       tags: ["Node"]

+ 2 - 0
daemon/cluster/filters.go

@@ -16,6 +16,7 @@ func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filter
 		"label":      true,
 		"label":      true,
 		"role":       true,
 		"role":       true,
 		"membership": true,
 		"membership": true,
+		"node.label": true,
 	}
 	}
 	if err := filter.Validate(accepted); err != nil {
 	if err := filter.Validate(accepted); err != nil {
 		return nil, err
 		return nil, err
@@ -24,6 +25,7 @@ func newListNodesFilters(filter filters.Args) (*swarmapi.ListNodesRequest_Filter
 		NamePrefixes: filter.Get("name"),
 		NamePrefixes: filter.Get("name"),
 		IDPrefixes:   filter.Get("id"),
 		IDPrefixes:   filter.Get("id"),
 		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
 		Labels:       runconfigopts.ConvertKVStringsToMap(filter.Get("label")),
+		NodeLabels:   runconfigopts.ConvertKVStringsToMap(filter.Get("node.label")),
 	}
 	}
 
 
 	for _, r := range filter.Get("role") {
 	for _, r := range filter.Get("role") {

+ 4 - 0
docs/api/version-history.md

@@ -26,6 +26,10 @@ keywords: "API, Docker, rcli, REST, documentation"
 * `POST /swarm/init` now accepts a `DefaultAddrPool` property to set global scope default address pool
 * `POST /swarm/init` now accepts a `DefaultAddrPool` property to set global scope default address pool
 * `POST /swarm/init` now accepts a `SubnetSize` property to set global scope networks by giving the
 * `POST /swarm/init` now accepts a `SubnetSize` property to set global scope networks by giving the
   length of the subnet masks for every such network
   length of the subnet masks for every such network
+* `GET /nodes` now supports a filter type `node.label` filter to filter nodes based
+  on the node.label. The format of the label filter is `node.label=<key>`/`node.label=<key>=<value>`
+  to return those with the specified labels, or `node.label!=<key>`/`node.label!=<key>=<value>`
+  to return those without the specified labels.
 
 
 ## V1.38 API changes
 ## V1.38 API changes