浏览代码

Use singular tag names in swagger.yaml

This is required to make the type generation put things in the
correct directory, but unfortunately makes the names in the
documentation menu look a bit crap.

I think the best solution would be to add a `x-display-name`
extension to tags to determine how the tags show up in the menu,
rather than it depend on the name of the tag. I shall do this in
a follow-up PR - for now, let's fix the breakage.

Fixes #29045

Signed-off-by: Ben Firshman <ben@firshman.co.uk>
Ben Firshman 8 年之前
父节点
当前提交
30a9249e15
共有 1 个文件被更改,包括 86 次插入86 次删除
  1. 86 86
      api/swagger.yaml

+ 86 - 86
api/swagger.yaml

@@ -90,21 +90,21 @@ info:
 
 
 # The tags on paths define the menu sections in the ReDoc documentation, so
 # The tags on paths define the menu sections in the ReDoc documentation, so
 # the usage of tags must make sense for that:
 # the usage of tags must make sense for that:
-# - They should be plural, not singular.
+# - They should be singular, not plural.
 # - There should not be too many tags, or the menu becomes unwieldly. For
 # - There should not be too many tags, or the menu becomes unwieldly. For
 #   example, it is preferable to add a path to the "System" tag instead of
 #   example, it is preferable to add a path to the "System" tag instead of
 #   creating a tag with a single path in it.
 #   creating a tag with a single path in it.
 # - The order of tags in this list defines the order in the menu.
 # - The order of tags in this list defines the order in the menu.
 tags:
 tags:
   # Primary objects
   # Primary objects
-  - name: "Containers"
+  - name: "Container"
     description: |
     description: |
       Create and manage containers.
       Create and manage containers.
-  - name: "Images"
-  - name: "Networks"
+  - name: "Image"
+  - name: "Network"
     description: |
     description: |
       Networks are user-defined networks that containers can be attached to. See the [networking documentation](https://docs.docker.com/engine/userguide/networking/) for more information.
       Networks are user-defined networks that containers can be attached to. See the [networking documentation](https://docs.docker.com/engine/userguide/networking/) for more information.
-  - name: "Volumes"
+  - name: "Volume"
     description: |
     description: |
       Create and manage persistent storage that can be attached to containers.
       Create and manage persistent storage that can be attached to containers.
   - name: "Exec"
   - name: "Exec"
@@ -112,22 +112,22 @@ tags:
       Run new commands inside running containers. See the [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) for more information.
       Run new commands inside running containers. See the [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) for more information.
 
 
       To exec a command in a container, you first need to create an exec instance, then start it. These two API endpoints are wrapped up in a single command-line command, `docker exec`.
       To exec a command in a container, you first need to create an exec instance, then start it. These two API endpoints are wrapped up in a single command-line command, `docker exec`.
-  - name: "Secrets"
+  - name: "Secret"
   # Swarm things
   # Swarm things
   - name: "Swarm"
   - name: "Swarm"
     description: |
     description: |
       Engines can be clustered together in a swarm. See [the swarm mode documentation](https://docs.docker.com/engine/swarm/) for more information.
       Engines can be clustered together in a swarm. See [the swarm mode documentation](https://docs.docker.com/engine/swarm/) for more information.
-  - name: "Nodes"
+  - name: "Node"
     description: |
     description: |
       Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.
       Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.
-  - name: "Services"
+  - name: "Service"
     description: |
     description: |
       Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.
       Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.
-  - name: "Tasks"
+  - name: "Task"
     description: |
     description: |
       A task is a container running on a swarm. It is the atomic scheduling unit of swarm. Swarm mode must be enabled for these endpoints to work.
       A task is a container running on a swarm. It is the atomic scheduling unit of swarm. Swarm mode must be enabled for these endpoints to work.
   # System things
   # System things
-  - name: "Plugins"
+  - name: "Plugin"
   - name: "System"
   - name: "System"
 
 
 definitions:
 definitions:
@@ -2619,7 +2619,7 @@ paths:
           description: "server error"
           description: "server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/create:
   /containers/create:
     post:
     post:
       summary: "Create a container"
       summary: "Create a container"
@@ -2818,7 +2818,7 @@ paths:
           description: "server error"
           description: "server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/json:
   /containers/{id}/json:
     get:
     get:
       summary: "Inspect a container"
       summary: "Inspect a container"
@@ -3094,7 +3094,7 @@ paths:
           type: "boolean"
           type: "boolean"
           default: false
           default: false
           description: "Return the size of container as fields `SizeRw` and `SizeRootFs`"
           description: "Return the size of container as fields `SizeRw` and `SizeRootFs`"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/top:
   /containers/{id}/top:
     get:
     get:
       summary: "List processes running inside a container"
       summary: "List processes running inside a container"
@@ -3170,7 +3170,7 @@ paths:
           description: "The arguments to pass to `ps`. For example, `aux`"
           description: "The arguments to pass to `ps`. For example, `aux`"
           type: "string"
           type: "string"
           default: "-ef"
           default: "-ef"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/logs:
   /containers/{id}/logs:
     get:
     get:
       summary: "Get container logs"
       summary: "Get container logs"
@@ -3239,7 +3239,7 @@ paths:
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
           type: "string"
           type: "string"
           default: "all"
           default: "all"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/changes:
   /containers/{id}/changes:
     get:
     get:
       summary: "Get changes on a container’s filesystem"
       summary: "Get changes on a container’s filesystem"
@@ -3295,7 +3295,7 @@ paths:
           required: true
           required: true
           description: "ID or name of the container"
           description: "ID or name of the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/export:
   /containers/{id}/export:
     get:
     get:
       summary: "Export a container"
       summary: "Export a container"
@@ -3323,7 +3323,7 @@ paths:
           required: true
           required: true
           description: "ID or name of the container"
           description: "ID or name of the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/stats:
   /containers/{id}/stats:
     get:
     get:
       summary: "Get container stats based on resource usage"
       summary: "Get container stats based on resource usage"
@@ -3451,7 +3451,7 @@ paths:
           description: "Stream the output. If false, the stats will be output once and then it will disconnect."
           description: "Stream the output. If false, the stats will be output once and then it will disconnect."
           type: "boolean"
           type: "boolean"
           default: true
           default: true
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/resize:
   /containers/{id}/resize:
     post:
     post:
       summary: "Resize a container TTY"
       summary: "Resize a container TTY"
@@ -3489,7 +3489,7 @@ paths:
           in: "query"
           in: "query"
           description: "Width of the tty session in characters"
           description: "Width of the tty session in characters"
           type: "integer"
           type: "integer"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/start:
   /containers/{id}/start:
     post:
     post:
       summary: "Start a container"
       summary: "Start a container"
@@ -3522,7 +3522,7 @@ paths:
           in: "query"
           in: "query"
           description: "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`."
           description: "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`."
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/stop:
   /containers/{id}/stop:
     post:
     post:
       summary: "Stop a container"
       summary: "Stop a container"
@@ -3555,7 +3555,7 @@ paths:
           in: "query"
           in: "query"
           description: "Number of seconds to wait before killing the container"
           description: "Number of seconds to wait before killing the container"
           type: "integer"
           type: "integer"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/restart:
   /containers/{id}/restart:
     post:
     post:
       summary: "Restart a container"
       summary: "Restart a container"
@@ -3584,7 +3584,7 @@ paths:
           in: "query"
           in: "query"
           description: "Number of seconds to wait before killing the container"
           description: "Number of seconds to wait before killing the container"
           type: "integer"
           type: "integer"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/kill:
   /containers/{id}/kill:
     post:
     post:
       summary: "Kill a container"
       summary: "Kill a container"
@@ -3615,7 +3615,7 @@ paths:
           description: "Signal to send to the container as an integer or string (e.g. `SIGINT`)"
           description: "Signal to send to the container as an integer or string (e.g. `SIGINT`)"
           type: "string"
           type: "string"
           default: "SIGKILL"
           default: "SIGKILL"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/update:
   /containers/{id}/update:
     post:
     post:
       summary: "Update a container"
       summary: "Update a container"
@@ -3676,7 +3676,7 @@ paths:
               RestartPolicy:
               RestartPolicy:
                 MaximumRetryCount: 4
                 MaximumRetryCount: 4
                 Name: "on-failure"
                 Name: "on-failure"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/rename:
   /containers/{id}/rename:
     post:
     post:
       summary: "Rename a container"
       summary: "Rename a container"
@@ -3710,7 +3710,7 @@ paths:
           required: true
           required: true
           description: "New name for the container"
           description: "New name for the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/pause:
   /containers/{id}/pause:
     post:
     post:
       summary: "Pause a container"
       summary: "Pause a container"
@@ -3739,7 +3739,7 @@ paths:
           required: true
           required: true
           description: "ID or name of the container"
           description: "ID or name of the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/unpause:
   /containers/{id}/unpause:
     post:
     post:
       summary: "Unpause a container"
       summary: "Unpause a container"
@@ -3765,7 +3765,7 @@ paths:
           required: true
           required: true
           description: "ID or name of the container"
           description: "ID or name of the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/attach:
   /containers/{id}/attach:
     post:
     post:
       summary: "Attach to a container"
       summary: "Attach to a container"
@@ -3909,7 +3909,7 @@ paths:
           description: "Attach to `stderr`"
           description: "Attach to `stderr`"
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/attach/ws:
   /containers/{id}/attach/ws:
     get:
     get:
       summary: "Attach to a container via a websocket"
       summary: "Attach to a container via a websocket"
@@ -3969,7 +3969,7 @@ paths:
           description: "Attach to `stderr`"
           description: "Attach to `stderr`"
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/wait:
   /containers/{id}/wait:
     post:
     post:
       summary: "Wait for a container"
       summary: "Wait for a container"
@@ -4004,7 +4004,7 @@ paths:
           required: true
           required: true
           description: "ID or name of the container"
           description: "ID or name of the container"
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}:
   /containers/{id}:
     delete:
     delete:
       summary: "Remove a container"
       summary: "Remove a container"
@@ -4043,7 +4043,7 @@ paths:
           description: "If the container is running, kill it before removing it."
           description: "If the container is running, kill it before removing it."
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/{id}/archive:
   /containers/{id}/archive:
     head:
     head:
       summary: "Get information about files in a container"
       summary: "Get information about files in a container"
@@ -4089,7 +4089,7 @@ paths:
           required: true
           required: true
           description: "Resource in the container’s filesystem to archive."
           description: "Resource in the container’s filesystem to archive."
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
     get:
     get:
       summary: "Get an archive of a filesystem resource in a container"
       summary: "Get an archive of a filesystem resource in a container"
       description: "Get an tar archive of a resource in the filesystem of container id."
       description: "Get an tar archive of a resource in the filesystem of container id."
@@ -4132,7 +4132,7 @@ paths:
           required: true
           required: true
           description: "Resource in the container’s filesystem to archive."
           description: "Resource in the container’s filesystem to archive."
           type: "string"
           type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
     put:
     put:
       summary: "Extract an archive of files or folders to a directory in a container"
       summary: "Extract an archive of files or folders to a directory in a container"
       description: "Upload a tar archive to be extracted to a path in the filesystem of container id."
       description: "Upload a tar archive to be extracted to a path in the filesystem of container id."
@@ -4183,7 +4183,7 @@ paths:
           description: "The input stream must be a tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz."
           description: "The input stream must be a tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz."
           schema:
           schema:
             type: "string"
             type: "string"
-      tags: ["Containers"]
+      tags: ["Container"]
   /containers/prune:
   /containers/prune:
     post:
     post:
       summary: "Delete stopped containers"
       summary: "Delete stopped containers"
@@ -4211,7 +4211,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Containers"]
+      tags: ["Container"]
   /images/json:
   /images/json:
     get:
     get:
       summary: "List Images"
       summary: "List Images"
@@ -4282,7 +4282,7 @@ paths:
           description: "Show digest information as a `RepoDigests` field on each image."
           description: "Show digest information as a `RepoDigests` field on each image."
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Images"]
+      tags: ["Image"]
   /build:
   /build:
     post:
     post:
       summary: "Build an image"
       summary: "Build an image"
@@ -4429,7 +4429,7 @@ paths:
           description: "server error"
           description: "server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Images"]
+      tags: ["Image"]
   /images/create:
   /images/create:
     post:
     post:
       summary: "Create an image"
       summary: "Create an image"
@@ -4474,7 +4474,7 @@ paths:
           in: "header"
           in: "header"
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
           type: "string"
           type: "string"
-      tags: ["Images"]
+      tags: ["Image"]
   /images/{name}/json:
   /images/{name}/json:
     get:
     get:
       summary: "Inspect an image"
       summary: "Inspect an image"
@@ -4580,7 +4580,7 @@ paths:
           description: "Image name or id"
           description: "Image name or id"
           type: "string"
           type: "string"
           required: true
           required: true
-      tags: ["Images"]
+      tags: ["Image"]
   /images/{name}/history:
   /images/{name}/history:
     get:
     get:
       summary: "Get the history of an image"
       summary: "Get the history of an image"
@@ -4650,7 +4650,7 @@ paths:
           description: "Image name or ID"
           description: "Image name or ID"
           type: "string"
           type: "string"
           required: true
           required: true
-      tags: ["Images"]
+      tags: ["Image"]
   /images/{name}/push:
   /images/{name}/push:
     post:
     post:
       summary: "Push an image"
       summary: "Push an image"
@@ -4689,7 +4689,7 @@ paths:
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
           description: "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)"
           type: "string"
           type: "string"
           required: true
           required: true
-      tags: ["Images"]
+      tags: ["Image"]
   /images/{name}/tag:
   /images/{name}/tag:
     post:
     post:
       summary: "Tag an image"
       summary: "Tag an image"
@@ -4728,7 +4728,7 @@ paths:
           in: "query"
           in: "query"
           description: "The name of the new tag."
           description: "The name of the new tag."
           type: "string"
           type: "string"
-      tags: ["Images"]
+      tags: ["Image"]
   /images/{name}:
   /images/{name}:
     delete:
     delete:
       summary: "Remove an image"
       summary: "Remove an image"
@@ -4779,7 +4779,7 @@ paths:
           description: "Do not delete untagged parent images"
           description: "Do not delete untagged parent images"
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Images"]
+      tags: ["Image"]
   /images/search:
   /images/search:
     get:
     get:
       summary: "Search images"
       summary: "Search images"
@@ -4845,7 +4845,7 @@ paths:
             - `is-automated=(true|false)`
             - `is-automated=(true|false)`
             - `is-official=(true|false)`
             - `is-official=(true|false)`
           type: "string"
           type: "string"
-      tags: ["Images"]
+      tags: ["Image"]
   /images/prune:
   /images/prune:
     post:
     post:
       summary: "Delete unused images"
       summary: "Delete unused images"
@@ -4883,7 +4883,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Images"]
+      tags: ["Image"]
   /auth:
   /auth:
     post:
     post:
       summary: "Check auth configuration"
       summary: "Check auth configuration"
@@ -5262,7 +5262,7 @@ paths:
           in: "query"
           in: "query"
           description: "`Dockerfile` instructions to apply while committing"
           description: "`Dockerfile` instructions to apply while committing"
           type: "string"
           type: "string"
-      tags: ["Images"]
+      tags: ["Image"]
   /events:
   /events:
     get:
     get:
       summary: "Monitor events"
       summary: "Monitor events"
@@ -5488,7 +5488,7 @@ paths:
           description: "Image name or ID"
           description: "Image name or ID"
           type: "string"
           type: "string"
           required: true
           required: true
-      tags: ["Images"]
+      tags: ["Image"]
   /images/get:
   /images/get:
     get:
     get:
       summary: "Export several images"
       summary: "Export several images"
@@ -5518,7 +5518,7 @@ paths:
           type: "array"
           type: "array"
           items:
           items:
             type: "string"
             type: "string"
-      tags: ["Images"]
+      tags: ["Image"]
   /images/load:
   /images/load:
     post:
     post:
       summary: "Import images"
       summary: "Import images"
@@ -5550,7 +5550,7 @@ paths:
           description: "Suppress progress details during load."
           description: "Suppress progress details during load."
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Images"]
+      tags: ["Image"]
   /containers/{id}/exec:
   /containers/{id}/exec:
     post:
     post:
       summary: "Create an exec instance"
       summary: "Create an exec instance"
@@ -5833,7 +5833,7 @@ paths:
               driver name.
               driver name.
           type: "string"
           type: "string"
           format: "json"
           format: "json"
-      tags: ["Volumes"]
+      tags: ["Volume"]
 
 
   /volumes/create:
   /volumes/create:
     post:
     post:
@@ -5883,7 +5883,7 @@ paths:
                 com.example.some-label: "some-value"
                 com.example.some-label: "some-value"
                 com.example.some-other-label: "some-other-value"
                 com.example.some-other-label: "some-other-value"
               Driver: "custom"
               Driver: "custom"
-      tags: ["Volumes"]
+      tags: ["Volume"]
 
 
   /volumes/{name}:
   /volumes/{name}:
     get:
     get:
@@ -5909,7 +5909,7 @@ paths:
           required: true
           required: true
           description: "Volume name or ID"
           description: "Volume name or ID"
           type: "string"
           type: "string"
-      tags: ["Volumes"]
+      tags: ["Volume"]
 
 
     delete:
     delete:
       summary: "Remove a volume"
       summary: "Remove a volume"
@@ -5941,7 +5941,7 @@ paths:
           description: "Force the removal of the volume"
           description: "Force the removal of the volume"
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Volumes"]
+      tags: ["Volume"]
   /volumes/prune:
   /volumes/prune:
     post:
     post:
       summary: "Delete unused volumes"
       summary: "Delete unused volumes"
@@ -5969,7 +5969,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Volumes"]
+      tags: ["Volume"]
   /networks:
   /networks:
     get:
     get:
       summary: "List networks"
       summary: "List networks"
@@ -6050,7 +6050,7 @@ paths:
             - `name=<network-name>` Matches all or part of a network name.
             - `name=<network-name>` Matches all or part of a network name.
             - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks.
             - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks.
           type: "string"
           type: "string"
-      tags: ["Networks"]
+      tags: ["Network"]
 
 
   /networks/{id}:
   /networks/{id}:
     get:
     get:
@@ -6073,7 +6073,7 @@ paths:
           description: "Network ID or name"
           description: "Network ID or name"
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Networks"]
+      tags: ["Network"]
 
 
     delete:
     delete:
       summary: "Remove a network"
       summary: "Remove a network"
@@ -6095,7 +6095,7 @@ paths:
           description: "Network ID or name"
           description: "Network ID or name"
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Networks"]
+      tags: ["Network"]
 
 
   /networks/create:
   /networks/create:
     post:
     post:
@@ -6191,7 +6191,7 @@ paths:
               Labels:
               Labels:
                 com.example.some-label: "some-value"
                 com.example.some-label: "some-value"
                 com.example.some-other-label: "some-other-value"
                 com.example.some-other-label: "some-other-value"
-      tags: ["Networks"]
+      tags: ["Network"]
 
 
   /networks/{id}/connect:
   /networks/{id}/connect:
     post:
     post:
@@ -6237,7 +6237,7 @@ paths:
                 IPAMConfig:
                 IPAMConfig:
                   IPv4Address: "172.24.56.89"
                   IPv4Address: "172.24.56.89"
                   IPv6Address: "2001:db8::5689"
                   IPv6Address: "2001:db8::5689"
-      tags: ["Networks"]
+      tags: ["Network"]
 
 
   /networks/{id}/disconnect:
   /networks/{id}/disconnect:
     post:
     post:
@@ -6278,7 +6278,7 @@ paths:
               Force:
               Force:
                 type: "boolean"
                 type: "boolean"
                 description: "Force the container to disconnect from the network."
                 description: "Force the container to disconnect from the network."
-      tags: ["Networks"]
+      tags: ["Network"]
   /networks/prune:
   /networks/prune:
     post:
     post:
       summary: "Delete unused networks"
       summary: "Delete unused networks"
@@ -6302,7 +6302,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Networks"]
+      tags: ["Network"]
   /plugins:
   /plugins:
     get:
     get:
       summary: "List plugins"
       summary: "List plugins"
@@ -6395,7 +6395,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
 
 
   /plugins/pull:
   /plugins/pull:
     post:
     post:
@@ -6452,7 +6452,7 @@ paths:
           in: "header"
           in: "header"
           description: "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)"
           description: "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)"
           type: "string"
           type: "string"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/{name}:
   /plugins/{name}:
     get:
     get:
       summary: "Inspect a plugin"
       summary: "Inspect a plugin"
@@ -6476,7 +6476,7 @@ paths:
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
     delete:
     delete:
       summary: "Remove a plugin"
       summary: "Remove a plugin"
       operationId: "PluginDelete"
       operationId: "PluginDelete"
@@ -6504,7 +6504,7 @@ paths:
           description: "Disable the plugin before removing. This may result in issues if the plugin is in use by a container."
           description: "Disable the plugin before removing. This may result in issues if the plugin is in use by a container."
           type: "boolean"
           type: "boolean"
           default: false
           default: false
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/{name}/enable:
   /plugins/{name}/enable:
     post:
     post:
       summary: "Enable a plugin"
       summary: "Enable a plugin"
@@ -6527,7 +6527,7 @@ paths:
           description: "Set the HTTP client timeout (in seconds)"
           description: "Set the HTTP client timeout (in seconds)"
           type: "integer"
           type: "integer"
           default: 0
           default: 0
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/{name}/disable:
   /plugins/{name}/disable:
     post:
     post:
       summary: "Disable a plugin"
       summary: "Disable a plugin"
@@ -6545,7 +6545,7 @@ paths:
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
           description: "The name of the plugin. The `:latest` tag is optional, and is the default if omitted."
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/create:
   /plugins/create:
     post:
     post:
       summary: "Create a plugin"
       summary: "Create a plugin"
@@ -6571,7 +6571,7 @@ paths:
           schema:
           schema:
             type: "string"
             type: "string"
             format: "binary"
             format: "binary"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/{name}/push:
   /plugins/{name}/push:
     post:
     post:
       summary: "Push a plugin"
       summary: "Push a plugin"
@@ -6595,7 +6595,7 @@ paths:
           description: "server error"
           description: "server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /plugins/{name}/set:
   /plugins/{name}/set:
     post:
     post:
       summary: "Configure a plugin"
       summary: "Configure a plugin"
@@ -6626,7 +6626,7 @@ paths:
           description: "Server error"
           description: "Server error"
           schema:
           schema:
             $ref: "#/definitions/ErrorResponse"
             $ref: "#/definitions/ErrorResponse"
-      tags: ["Plugins"]
+      tags: ["Plugin"]
   /nodes:
   /nodes:
     get:
     get:
       summary: "List nodes"
       summary: "List nodes"
@@ -6655,7 +6655,7 @@ paths:
             - `name=<node name>`
             - `name=<node name>`
             - `role=`(`manager`|`worker`)`
             - `role=`(`manager`|`worker`)`
           type: "string"
           type: "string"
-      tags: ["Nodes"]
+      tags: ["Node"]
   /nodes/{id}:
   /nodes/{id}:
     get:
     get:
       summary: "Inspect a node"
       summary: "Inspect a node"
@@ -6679,7 +6679,7 @@ paths:
           description: "The ID or name of the node"
           description: "The ID or name of the node"
           type: "string"
           type: "string"
           required: true
           required: true
-      tags: ["Nodes"]
+      tags: ["Node"]
     delete:
     delete:
       summary: "Delete a node"
       summary: "Delete a node"
       operationId: "NodeDelete"
       operationId: "NodeDelete"
@@ -6705,7 +6705,7 @@ paths:
           description: "Force remove a node from the swarm"
           description: "Force remove a node from the swarm"
           default: false
           default: false
           type: "boolean"
           type: "boolean"
-      tags: ["Nodes"]
+      tags: ["Node"]
   /nodes/{id}/update:
   /nodes/{id}/update:
     post:
     post:
       summary: "Update a node"
       summary: "Update a node"
@@ -6737,7 +6737,7 @@ paths:
           type: "integer"
           type: "integer"
           format: "int64"
           format: "int64"
           required: true
           required: true
-      tags: ["Nodes"]
+      tags: ["Node"]
   /swarm:
   /swarm:
     get:
     get:
       summary: "Inspect swarm"
       summary: "Inspect swarm"
@@ -7035,7 +7035,7 @@ paths:
             - `id=<service id>`
             - `id=<service id>`
             - `name=<service name>`
             - `name=<service name>`
             - `label=<service label>`
             - `label=<service label>`
-      tags: ["Services"]
+      tags: ["Service"]
   /services/create:
   /services/create:
     post:
     post:
       summary: "Create a service"
       summary: "Create a service"
@@ -7132,7 +7132,7 @@ paths:
           in: "header"
           in: "header"
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
           type: "string"
           type: "string"
-      tags: ["Services"]
+      tags: ["Service"]
   /services/{id}:
   /services/{id}:
     get:
     get:
       summary: "Inspect a service"
       summary: "Inspect a service"
@@ -7156,7 +7156,7 @@ paths:
           description: "ID or name of service."
           description: "ID or name of service."
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Services"]
+      tags: ["Service"]
     delete:
     delete:
       summary: "Delete a service"
       summary: "Delete a service"
       operationId: "ServiceDelete"
       operationId: "ServiceDelete"
@@ -7177,7 +7177,7 @@ paths:
           description: "ID or name of service."
           description: "ID or name of service."
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Services"]
+      tags: ["Service"]
   /services/{id}/update:
   /services/{id}/update:
     post:
     post:
       summary: "Update a service"
       summary: "Update a service"
@@ -7252,7 +7252,7 @@ paths:
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
           description: "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)"
           type: "string"
           type: "string"
 
 
-      tags: ["Services"]
+      tags: ["Service"]
   /services/{id}/logs:
   /services/{id}/logs:
     get:
     get:
       summary: "Get service logs"
       summary: "Get service logs"
@@ -7329,7 +7329,7 @@ paths:
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
           description: "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines."
           type: "string"
           type: "string"
           default: "all"
           default: "all"
-      tags: ["Services"]
+      tags: ["Service"]
   /tasks:
   /tasks:
     get:
     get:
       summary: "List tasks"
       summary: "List tasks"
@@ -7472,7 +7472,7 @@ paths:
             - `node=<node id or name>`
             - `node=<node id or name>`
             - `label=key` or `label="key=value"`
             - `label=key` or `label="key=value"`
             - `desired-state=(running | shutdown | accepted)`
             - `desired-state=(running | shutdown | accepted)`
-      tags: ["Tasks"]
+      tags: ["Task"]
   /tasks/{id}:
   /tasks/{id}:
     get:
     get:
       summary: "Inspect a task"
       summary: "Inspect a task"
@@ -7498,7 +7498,7 @@ paths:
           description: "ID of the task"
           description: "ID of the task"
           required: true
           required: true
           type: "string"
           type: "string"
-      tags: ["Tasks"]
+      tags: ["Task"]
   /secrets:
   /secrets:
     get:
     get:
       summary: "List secrets"
       summary: "List secrets"
@@ -7532,7 +7532,7 @@ paths:
             A JSON encoded value of the filters (a `map[string][]string`) to process on the secrets list. Available filters:
             A JSON encoded value of the filters (a `map[string][]string`) to process on the secrets list. Available filters:
 
 
             - `names=<secret name>`
             - `names=<secret name>`
-      tags: ["Secrets"]
+      tags: ["Secret"]
   /secrets/create:
   /secrets/create:
     post:
     post:
       summary: "Create a secret"
       summary: "Create a secret"
@@ -7576,7 +7576,7 @@ paths:
                   Labels:
                   Labels:
                     foo: "bar"
                     foo: "bar"
                   Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
                   Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg=="
-      tags: ["Secrets"]
+      tags: ["Secret"]
   /secrets/{id}:
   /secrets/{id}:
     get:
     get:
       summary: "Inspect a secret"
       summary: "Inspect a secret"
@@ -7614,7 +7614,7 @@ paths:
           required: true
           required: true
           type: "string"
           type: "string"
           description: "ID of the secret"
           description: "ID of the secret"
-      tags: ["Secrets"]
+      tags: ["Secret"]
     delete:
     delete:
       summary: "Delete a secret"
       summary: "Delete a secret"
       operationId: "SecretDelete"
       operationId: "SecretDelete"
@@ -7637,4 +7637,4 @@ paths:
           required: true
           required: true
           type: "string"
           type: "string"
           description: "ID of the secret"
           description: "ID of the secret"
-      tags: ["Secrets"]
+      tags: ["Secret"]